Wiki Markup |
---|
The default {{SecurityManager}} checks whether the caller of a particular method has sufficient permissions to proceed with an action. An action is a level of access, for instance, the actions for {{java.io.FilePermission}} are "read""read", "write""write", "execute""execute", and "delete""delete" \[[Sun 06|AA. Java References#Sun 06]\]. The Permission Descriptions and Risks guide \[[Permissions 08|AA. Java References#Permissions 08]\] enumerates the default permissions and the risks associated with granting these permissions to Java code. |
...
Code Block | ||
---|---|---|
| ||
class LoadLibrary { private void loadLibrary() { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { // privileged code System.loadLibrary("awt""awt"); // perform some sensitive operation like setting the default exception handler MyExceptionReporter.setExceptionReporter(reporter); return null; } }); } } |
...
Code Block | ||
---|---|---|
| ||
class LoadLibrary { private void loadLibrary() { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { // privileged code System.loadLibrary("awt""awt"); SecurityManager sm = System.getSecurityManager(); if(sm != null) { sm.checkPermission(new ExceptionReporterPermission(""exc.reporter"")); } // perform some sensitive operation like setting the default exception handler MyExceptionReporter.setExceptionReporter(reporter); return null; } }); } } class ExceptionReporterPermission extends BasicPermission { public ExceptionReporterPermission(String permName) { super(permName); } // Even though the actions parameter is ignored, this constructor has to be defined public ExceptionReporterPermission(String permName, String actions) { super(permName, actions); } } |
Assuming that the above sources reside in the c:\package
directory on a Windows based system, for example, the policy file needs to grant two permissions, ExceptionReporterPermission exc.reporter
and RuntimePermission loadlibrary.awt
.
Code Block |
---|
grant codeBase ""file:c:\\package"" { // For *nix, file:${user.home}/package/ permission ExceptionReporterPermission ""exc.reporter""; permission java.lang.RuntimePermission ""loadLibrary.awt""; }; |
Risk Assessment
Running Java code without defining custom permissions where default ones are inapplicable can leave an application open to privilege escalation vulnerabilities.
...
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
References
Wiki Markup |
---|
\[[API 06|AA. Java References#API 06]\] [Class SecurityManager|http://java.sun.com/javase/6/docs/api/java/lang/SecurityManager.html] \[[Oaks 01|AA. Java References#Oaks 01]\] Chapter 5: The Access Controller, "Permissions""Permissions" \[[Policy 02|AA. Java References#Policy 02]\] \[[Sun 06|AA. Java References#Sun 06]\] [Permission Descriptions and Risks|http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html] |
...
SEC07-J. Do not grant untrusted code access to classes existing in forbidden packages 02. Platform Security (SEC) SEC09-J. Prefer using SSLSockets over Sockets for secure data exchange