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.
Ein Fehler [1] bei der Umwandlung bestimmter Zahlen fĂŒhrt unter der Skriptsprache PHP [2] 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 [3]-Koprozessor fĂŒr die Verarbeitung von Gleitkommazahlen genutzt wird. Das x87-Design enthĂ€lt einen seit LĂ€ngerem bekannten Fehler [4], der bei der rechnerischen AnnĂ€herung an eine 64-Bit-Gleitkommazahl zu dem Problem [5] (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 [6] im Repository bereit. (dab [7])
URL dieses Artikels:
https://www.heise.de/-1163658
Links in diesem Artikel:
[1] http://www.exploringbinary.com/php-hangs-on-numeric-value-2-2250738585072011e-308/
[2] http://www.php.net/
[3] https://secure.wikimedia.org/wikipedia/de/wiki/X87
[4] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323
[5] http://hal.archives-ouvertes.fr/docs/00/28/14/29/PDF/floating-point-article.pdf
[6] http://svn.php.net/viewvc?view=revision&revision=307095
[7] mailto:dab@ct.de
Copyright © 2011 Heise Medien