649
Example 4:
This code intends to allow only Administrators to print debug information about a system.
Example Language: Java (Bad)
public enum Roles {
ADMIN,USER,GUEST
}
public void printDebugInfo(User requestingUser){
if(isAuthenticated(requestingUser)){
switch(requestingUser.role){
case GUEST:
System.out.println("You are not authorized to perform this command");
break;
default:
System.out.println(currentDebugState());
break;
}
}
else{
System.out.println("You must be logged in to perform this command");
}
}
While the intention was to only allow Administrators to print the debug information, the code as
written only excludes those with the role of "GUEST". Someone with the role of "ADMIN" or "USER"
will be allowed access, which goes against the original intent. An attacker may be able to use this
debug information to craft an attack on the system.
Example 5:
This code allows someone with the role of "ADMIN" or "OPERATOR" to reset a user's password.
The role of "OPERATOR" is intended to have less privileges than an "ADMIN", but still be able to
help users with small issues such as forgotten passwords.
Example Language: Java (Bad)
public enum Roles {
ADMIN,OPERATOR,USER,GUEST
}
public void resetPassword(User requestingUser, User user, String password ){
if(isAuthenticated(requestingUser)){
switch(requestingUser.role){
case GUEST:
System.out.println("You are not authorized to perform this command");
break;
case USER:
System.out.println("You are not authorized to perform this command");
break;
default:
setPassword(user,password);
break;
}
}
else{
System.out.println("You must be logged in to perform this command");
}
}
This code does not check the role of the user whose password is being reset. It is possible for
an Operator to gain Admin privileges by resetting the password of an Admin account and taking
control of that account.
Observed Examples
CWE Version 4.14
CWE-269: Improper Privilege Management
CWE-269: Improper Privilege Management