-
Notifications
You must be signed in to change notification settings - Fork 39
Description
In PIVSecurityProvider.java, lines 307-314 of checkAccessModeAdmin():
//
// ACCESS CONDITION 3 - User Administration Privilege
//
if ((mode != PIVObject.ACCESS_MODE_ALWAYS)
&& ((mode & PIVObject.ACCESS_MODE_USER_ADMIN) == PIVObject.ACCESS_MODE_USER_ADMIN)
&& checkAccessModeObject(object)) {
result = true;
}
This checks that ACCESS_MODE_USER_ADMIN is set when ACCESS_MODE_ALWAYS is not specified. There is no clause that results TRUE when ACCESS_MODE_ALWAYS is set. This means that an object with ACCESS_MODE_ALWAYS will not pass the security check in this method.
Should there be another if() clause for this? e.g.
if(mode == PIVObject.ACCESS_MODE_ALWAYS) {
result = true;
}
Or is this specifically not allowed for the checkAccessModeAdmin() function? I see that it is handled as I would expect in the checkAccessModeObject() method.
The code path that led me to this is from PIV.putData(). I expect that I can call putData() on a PIV object with ACCESS_MODE_ALWAYS and be able to mutate it, but the code is preventing that. Is this a bug or WAI?