Java (JRE/JDK) Schwachstelle kann zur Endlosschleifen (DOS) führen

9. Februar 2011

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)
Es ist nicht ausgeschlossen, daß es nicht noch andere Varianten gibt.

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
Die Sicherheitslücke betrifft sowohl 32-bit als auch 64-bit Systeme.

CERT.at vermutet, daß Java-basierte Smartphones genauso von der Sicherheitslücke betroffen sind.

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