Zum Hauptinhalt Zur Navigation Zur Suche

Denial of Service: Floating-Point-Bug auch in Java

Durch einen Fehler beim Konvertieren einer Gleitkommazahl kann ein Denial of Service in Java ausgelöst werden. Der Floating-Point-Bug war zuvor auch in PHP möglich.
/ Alexander Syska
4 Kommentare Auf Google folgen (öffnet im neuen Fenster)

Durch die fehlerhafte Verarbeitung der 64-Bit-Gleitkommazahl 2.2250738585072012e-308 ist es in Java möglich, einen Denial of Service (DoS) zu provozieren. Der Fehler ist von dem Studenten Konstantin Preißer entdeckt worden. Schuld daran ist die Konvertierung der Gleitkommazahl. Betroffen sind auch die 64-Bit-Varianten.

Vorher war bekanntgeworden, dass PHP von dem Floating-Point Bug betroffen ist. Hier konnte die Gleitkommazahl ebenfalls einen Denial of Service auslösen, was jedoch zügig gepatcht wurde. Das Problem geht auf einen bekannten Fehler(öffnet im neuen Fenster) in Intels x87-Design(öffnet im neuen Fenster) zurück. Demnach tritt das Problem bei Prozessoren mit einer x87 FPU (Floating Point Unit) auf, wenn nicht explizit die Verwendung von SSE oder Float-Store erzwungen wird.

Laut einem Kommentar von Preißer auf Exploitbinary.com(öffnet im neuen Fenster) hatte er den Fehler schon vor drei Wochen an Oracle gemeldet, der Konzern hatte aber nicht darauf reagiert.

Rekonstruieren lässt sich der Fehler sowohl im Compiler des aktuellen JDK als auch in Java-Programmen. Durch das Konvertieren der Gleitkommazahl mit Double.parseDouble trete in der Java-Klasse FloatingDecimal.java eine Endlosschleife auf, schreibt Preißler. Ein Patch von Oracle steht bislang aus.


Relevante Themen