DoS-Angriff mit Gleitkommazahl

Ein Fehler bei der Verarbeitung von Gleitkommazahlen in PHP lässt sich ausnutzen, um sämtliche CPU-Ressourcen in Beschlag zu nehmen. Unter Umständen lassen sich auch Server mit PHP-Anwendungen aus dem Tritt bringen.

In Pocket speichern vorlesen Druckansicht 233 Kommentare lesen
Lesezeit: 1 Min.
Von
  • Daniel Bachfeld

Ein Fehler bei der Umwandlung bestimmter Zahlen führt unter der Skriptsprache PHP zu einer Vollauslastung des Systems. So führt die Übersetzung der Zeichenkette "2.2250738585072011e-308" in eine Gleitkommazahl in der Funktion zend_strtod auf 32-Bit-Systemen zu einer Endlosschleife, in dessen Folge die CPU voll ausgelastet wird.

Betroffen sind PHP 5.2 und 5.3, allerdings offenbar nur auf Intel-CPUs, auf denen der x87-Koprozessor für die Verarbeitung von Gleitkommazahlen genutzt wird. Das x87-Design enthält einen seit Längerem bekannten Fehler, der bei der rechnerischen Annäherung an eine 64-Bit-Gleitkommazahl zu dem Problem (PDF) führt. 64-Bit-Systeme nutzen standardmäßig die Befehlserweiterung SSE, bei der der Fehler nicht auftritt. Die Verarbeitung der Zahlen 0.22250738585072011e-307, 22.250738585072011e-309 und 22250738585072011e-324 soll ebenfalls in eine Endlosschleife führen.

Unter Umständen lassen sich auch Serversysteme aus der Ferne auf diese Weise aus dem Tritt bringen, dazu könnte bereits das Senden des Wertes als Parameter in einem GET-Request genügen. Die PHP-Entwicker haben den Fehler in der kommenden Version 5.3.5 beseitigt. Für Version 5.2.16 steht ein Patch im Repository bereit. (dab)