Java (JRE/JDK) Schwachstelle kann zur Endlosschleifen (DOS) führen
9. Februar 2011
Durch Eingabe von "2.2250738585072012e-308" und anschliessendem Konvertieren in einen double Wert kann ein Java-basiertes Programm in eine Endlosschleife gelangen. Die CPU ist in diesem Fall dann vollkommen ausgelastet und das Programm bleibt effektiv aus Benutzersicht "stehen". Besonders leicht läßt sich dies auf Java-basierten Servern (Tomcat, JBoss) erreichen, indem man von einem beliebigen Rechner am Internet eine entsprechend präparierte HTTP Anfrage sendet. Mittlerweile ist bekannt, dass die Verwundbarkeit mit einigen Varianten der Zahl auftritt:
Informationsquelle(n):
Warnung von Oracle
http://www.oracle.com/technetwork/topics/security/alert-cve-2010-4476-305811.html
Hotfix von Oracle
http://www.oracle.com/technetwork/java/javase/fpupdater-tool-readme-305936.html
Original-Post von Konstantin Preisser
http://www.exploringbinary.com/why-volatile-fixes-the-2-2250738585072011e-308-bug/comment-page-1/#comment-4645
Meldung bei Heise
http://www.heise.de/security/meldung/Oracle-warnt-vor-Java-Schwachstelle-1185967.html
Sicherheitslücke in Sun/Oracle Java (JRE/JDK) führt zu Endlosschleifen und ermöglicht somit einen Denial of Service (DOS) Angriff - CERT.at ersucht daher um Beachtung der folgenden Meldung.
Beschreibung
Oracle warnt vor einer kritischen Sicherheitslücke in Java (JRE/JDK), die es Angreifern erlaubt, Java-basierte Programme in eine Endlosschleife zu manövrieren.Durch Eingabe von "2.2250738585072012e-308" und anschliessendem Konvertieren in einen double Wert kann ein Java-basiertes Programm in eine Endlosschleife gelangen. Die CPU ist in diesem Fall dann vollkommen ausgelastet und das Programm bleibt effektiv aus Benutzersicht "stehen". Besonders leicht läßt sich dies auf Java-basierten Servern (Tomcat, JBoss) erreichen, indem man von einem beliebigen Rechner am Internet eine entsprechend präparierte HTTP Anfrage sendet. Mittlerweile ist bekannt, dass die Verwundbarkeit mit einigen Varianten der Zahl auftritt:
- 0.00022250738585072012e-304 (Dezimalpunkt)
- 00000000002.2250738585072012e-308 (führende Nullen)
- 2.225073858507201200000e-308 (Nullen am Ende)
- 2.2250738585072012e-00308 (führende Nullen im Exponenten)
- 2.2250738585072012997800001e-308 (extra Ziffern nach Ziffer #17)
Hintergrund
Bei der Konvertierung des Zeichestrings "2.2250738585072012e-308" (und obiger Varianten) gerlangt Java in eine Endlosschleife und die Konvertierung oszilliert zwischen 0x1p-1022 (DBL_MIN) und 0x0.fffffffffffffp-1022. Zum ersten Mal ist das Problem bei PHP bekannt geworden, anschliessend entdeckte Konstantin Preißer, dass die Verwundbarkeit auch auf Java funktioniert.Auswirkungen
Jedes Java-basierte Programm als auch das Java Development Kit (JDK), das Double Werte extern einliest (z.B.: Internet User Input) und verarbeitet, kann in eine Endlosschleife gelangen (Denial Of Service Attacke).Betroffene Systeme
Es sind sowohl Java-basierte Server (Tomcat, JBoss) als auch Java Desktop Applikationen betroffen.- Java SE
- JDK und JRE 6 Update 23 und vorhergehende Versionen für Windows, Solaris und Linux
- JDK 5.0 Update 27 und vorhergehende Versionen für Solaris 9
- SDK 1.4.2_29 und vorhergehende Versionen für Solaris 8
- Java for Business
- JDK und JRE 6 Update 23 und vorhergehende Versionen für Windows, Solaris und Linux
- JDK und JRE 5.0 Update 27 und vorhergehende Versionen für Windows, Solaris und Linux
- JDK und JRE 1.4.2_29 und vorhergehende Versionen für Windows, Solaris und Linux
Abhilfe
Oracle bietet einen Hotfix an. Ein reguläres Update soll laut Oracle am 15.Februar erscheinen. CERT.at empfiehlt Webserver-Betreibern auch in der Zwischenzeit - soferne möglich - mittels Regular Expressions am Webserver nach HTTP "Accept-Language .*;q=2.225073858507.*" zu filtern und entsprechende HTTP Anfragen an Java-basierte Server (Tomcat, JBoss) zu blockieren. Unter Apache geht dies zum Beispiel mit mod_header. Dieser (mod_header) Filter mittels Regular Expressions ist allerdings nur als schnelle Lösung gegen automatisierte Angriffe zu sehen. Java sollte trotz Regular Expression Filtern gepatcht werden.mod_header Filter
Mod_header Dokumentation Einschalten von mod_header: LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so In der VirtualHosts Konfiguration:(...) RequestHeader edit Accept-Language 5073858507 5073858508 early RequestHeader edit Accept-Charset 5073858507 5073858508 early RequestHeader edit Accept-Encoding 5073858507 5073858508 early RequestHeader edit Accept 5073858507 5073858508 early (...)
Hinweis
Generell empfiehlt CERT.at, wo möglich die "automatisches Update"-Features von Software zu nutzen, parallel Firewall-Software aktiv und den Virenschutz aktuell zu halten.Informationsquelle(n):
Warnung von Oracle
http://www.oracle.com/technetwork/topics/security/alert-cve-2010-4476-305811.html
Hotfix von Oracle
http://www.oracle.com/technetwork/java/javase/fpupdater-tool-readme-305936.html
Original-Post von Konstantin Preisser
http://www.exploringbinary.com/why-volatile-fixes-the-2-2250738585072011e-308-bug/comment-page-1/#comment-4645
Meldung bei Heise
http://www.heise.de/security/meldung/Oracle-warnt-vor-Java-Schwachstelle-1185967.html