Reputation: 3236
If I set a security manager, for example:
private static class SecManager extends SecurityManager {
...
}
With:
System.setSecurityManager(new SecManager());
Which permission can I use (or rather prevent), to stop code further down the line setting the security manager again, with elevated permissions.
I am looking for a method like:
private static class SecManager extends SecurityManager {
@Override
public void checkSetSecurityManager(SecurityManager manager){
throw new AccessControlException("Not allowed to set new security Manager);
}
}
But of course, the checkSetSecurityManager doesn't exist, so i'm not sure exactly what to look for or how to deny that permission.
I would like to use the security manager to allow me to run some untrusted code, but I obviously don't want that code to be able to set it's own security manager. I did consider doing this at the OS level (create a new user for each bit of code), but that seems a little overkill. Instead, I run my own java main, which sets a security manager, then runs the untrusted code within the same JVM. I have made sure their code cannot start new processes already (as this would circumvent the security manager), but I need to make sure they cannot override the existing security manager.
I also use checkWrite and checkRead to make sure the code can only read/write in a certain dir.
Any help is much appreciated.
Thanks,
Upvotes: 4
Views: 891
Reputation: 5486
The following website https://www.securecoding.cert.org/confluence/display/jg/20.+Create+a+secure+sandbox+using+a+security+manager says the following about this:
If the current security policy enforced by the current security manager forbids replacements (by omitting the
RuntimePermission("setSecurityManager"))
, any attempt to invokesetSecurityManager()
will throw a SecurityException.
So it looks like the checkPermission()
method is the place to check for this.
The Javadoc for RuntimePermission
has a list of possible values to check for if other critical methods should be catched as well: https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimePermission.html
Upvotes: 3