You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Application code that calls security-sensitive methods must validate the arguments being passed to the methods. In particular, null values may be interpreted as benign by certain security-sensitive methods and may override default settings. Although security-sensitive methods must be coded defensively in the first place, sometimes the onus is on the client code to validate the arguments it provides. Failure to do so can result in privilege escalation and execution of arbitrary code.

Noncompliant Code Example

This noncompliant code example shows the two-argument doPrivileged() method which takes an access control context as the second argument. The construct allows changing privileges to that of a previously saved context.

AccessController.doPrivileged(new PrivilegedAction<Void>() {
  public Void run() {
    // ...
  }
}, accessControlContext);

When passed a null access control context, the two-argument doPrivileged() method will fail to reduce the current privileges to those of the previously saved context. Consequently, this code may grant excess privileges when the accessControlContext argument is null. Programmers who intend to call AccessController.doPrivileged() with a null access control context should explicitly pass the null constant.

Compliant Solution 

This compliant solution prevents granting of excess privileges by ensuring that accessControlContext is non-null:

if (accessControlContext == null) {
  throw new SecurityException("Missing AccessControlContext");
}
AccessController.doPrivileged(new PrivilegedAction<Void>() {
  public Void run() {
    // ...
  }
}, accessControlContext);

Applicability

Security-sensitive methods must be thoroughly understood and their parameters validated (to prevent null arguments, for instance) in order to prevent corner cases with unexpected argument values. If unexpected argument values are passed to security-sensitive methods, arbitrary code execution becomes possible and privilege escalation becomes likely.

Bibliography

 


  

  • No labels