catalina.policy-richtlinien mit dem SecurityManager aushebeln...

ruutaiokwu

Top Contributor
hallo zusammen,

habe gerade festgestellt dass sich die einstellung in der datei "catalina.policy" über die klasse java.lang.SecurityManager aushebeln lassen. dabei habe ich eine klasse WeakSecurityManger (extends SecurityManager) erstellt, den Konstruktor überschrieben und darin ein super(); hinzugefügt.

die restlichen funktionen habe ich überschrieben, void's leer gelassen und bei booleans immer false als rückgabewert definiert.

nun habe ich in der servlet-init()-funktion folgende zeilen geschrieben:

WeakSecurityManager wsm = new WeakSecurityManager();
System.setSecurityManager(wsm);


...nun wurden alle sicherheitsbeschränkungen ausser kraft gesetzt. ganz komisch, finde ich, dass die zu kontrollierende (web)applikation das überhaupt kann...???

oder müsste ich in der catalina.policy den aufruf des security managers in der webapplikation explizit verbieten?


grüsse, jan
 

ruutaiokwu

Top Contributor
nachtrag: WeakSecurityManager code:


Java:
import java.io.FileDescriptor;
import java.net.InetAddress;
import java.security.Permission;

public class WeakSecurityManager extends SecurityManager
{
  public WeakSecurityManager()
  {
    super();
  }

  @Override
  public boolean checkTopLevelWindow(Object arg0)
  {
    return false;
  }

  @Override
  public void checkAccept(String arg0, int arg1)
  {

  }

  @Override
  public void checkAccess(Thread arg0)
  {

  }

  @Override
  public void checkAccess(ThreadGroup arg0)
  {

  }

  @Override
  public void checkAwtEventQueueAccess()
  {

  }

  @Override
  public void checkConnect(String arg0, int arg1, Object arg2)
  {

  }

  @Override
  public void checkConnect(String arg0, int arg1)
  {

  }

  @Override
  public void checkCreateClassLoader()
  {

  }

  @Override
  public void checkDelete(String arg0)
  {

  }

  @Override
  public void checkExec(String arg0)
  {

  }

  @Override
  public void checkExit(int arg0)
  {

  }

  @Override
  public void checkLink(String arg0)
  {

  }

  @Override
  public void checkListen(int arg0)
  {

  }

  @Override
  public void checkMemberAccess(Class<?> arg0, int arg1)
  {

  }

  @Override
  public void checkMulticast(InetAddress arg0, byte arg1)
  {

  }

  @Override
  public void checkMulticast(InetAddress arg0)
  {

  }

  @Override
  public void checkPackageAccess(String arg0)
  {

  }

  @Override
  public void checkPackageDefinition(String arg0)
  {

  }

  @Override
  public void checkPermission(Permission arg0, Object arg1)
  {

  }

  @Override
  public void checkPermission(Permission arg0)
  {

  }

  @Override
  public void checkPrintJobAccess()
  {

  }

  @Override
  public void checkPropertiesAccess()
  {

  }

  @Override
  public void checkPropertyAccess(String arg0)
  {

  }

  @Override
  public void checkRead(FileDescriptor arg0)
  {

  }

  @Override
  public void checkRead(String arg0, Object arg1)
  {

  }

  @Override
  public void checkRead(String arg0)
  {

  }

  @Override
  public void checkSecurityAccess(String arg0)
  {

  }

  @Override
  public void checkSetFactory()
  {

  }

  @Override
  public void checkSystemClipboardAccess()
  {

  }

  @Override
  public void checkWrite(FileDescriptor arg0)
  {

  }

  @Override
  public void checkWrite(String arg0)
  {

  }
}
 
Zuletzt bearbeitet:

Tobias

Top Contributor
Javadoc hat gesagt.:
setSecurityManager

public static void setSecurityManager(SecurityManager s)

Sets the System security.

If there is a security manager already installed, this method first calls the security manager's checkPermission method with a RuntimePermission("setSecurityManager") permission to ensure it's ok to replace the existing security manager. This may result in throwing a SecurityException.

Otherwise, the argument is established as the current security manager. If the argument is null and no security manager has been established, then no action is taken and the method simply returns.

Parameters:
s - the security manager.
Throws:
SecurityException - if the security manager has already been set and its checkPermission method doesn't allow it to be replaced.
See Also:
getSecurityManager(), SecurityManager.checkPermission(java.security.Permission), RuntimePermission

Ich kenne mich jetzt mit catalina.policies nicht aus, aber grundsätzlich müsste nur eingestellt werden, dass die Webanwendung keinen neuen Securitymanager setzen darf.
 

ruutaiokwu

Top Contributor
hallo Tobias,

"...dass die Webanwendung keinen neuen Securitymanager setzen darf"

GENAU! das habe ich mir auch überlegt, wenn es darauf ankommt, müsste man wohl den aufruf des securitymanagers über die catalina.policy verbieten. das scheint die einzig logische erklärung zu sein...


danke & gruss, jan
 

Oben