isenberg
I'm new here

Hotfix gegen DoS-attack auf Java-Webserver, CVE-2010-4476 "java epsilon-bug"

Der heute veröffentlichte CVE-2010-4476 zeigt eine Schwachstelle in der Konvertierung von Fließkommazahlen in Zeichenketten aller bisherigen Oracle/Sun Java-VMs auf. Eine Umwandlung der Zeichenfolge 2.2250738585072012e-308 in eine Fließkommazahl führt zur Endlosschleife in dem betreffenden Java-Thread mit 100% Auslastung eines CPU-Cores.

Oracle bietet einen Hotfix, der die betreffende interne Java-Klasse der Java-VM innerhalb des rt.jar austauscht und somit auf jeder Version der Oracle/Sun Java-VM angewendet werden kann:

http://www.oracle.com/technetwork/java/javase/downloads/index.html#fpupdater

http://blogs.oracle.com/security/2011/02/security_alert_for_cve-2010-44.html

Ob ein Java-basierter Webserver betroffen ist, kann über folgenden Aufruf ermittelt werden, der aber zur erwähnten Überlastung des Systems führen kann und daher nur aufgerufen werden darf, wenn die Möglichkeit besteht, den Webserver anschliessend herunterzufahren und erneut zu starten!

curl -H "Accept-Language: en-us;q=2.2250738585072012e-308" http://server.domain.net

Der in FirstSpirit integrierte Jetty-Webserver ist ersten Testergebnissen nach nicht anfällig für diese direkte Ausnutzung der Schwachstelle über einen einzelnen HTTP-Request auf die Startseite.

Sofern der Webserver betroffen ist, wird der curl-Aufruf nicht beenden, kann aber über Ctrl-C abgebrochen werden.

Der Webserver wird anschließend bis zum Herunterfahren weiterhin mit 100% Auslastung eines CPU-Cores überlastet bleiben!

Falls ein Webserver bereits überlastet ist, kann mittels Thread-Dump (jstack JAVAPID oder kill -QUIT JAVAPID) überprüft werden, ob der beschriebene Fehlerfall vorliegt.

Mindestens einer der Java-Threads wird dann im folgenden Zustand hängen:

"Thread-Name" daemon prio=10 tid=0xd12345 nid=0x4567 runnable [0xd123456]

   java.lang.Thread.State: RUNNABLE

        at sun.misc.FloatingDecimal.multPow52(FloatingDecimal.java:162)

        at sun.misc.FloatingDecimal.doubleValue(FloatingDecimal.java:1510)

        at java.lang.Double.parseDouble(Double.java:510)

PHP ist übrigens auch betroffen, aber nur die 32bit-Implementierung. Test über:

php -r "print 2.2250738585072011e-308;"

Labels (1)
Tags (1)