Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Poważny błąd w PHP, setki serwisów podatnych na ataki DoS
Forum PHP.pl > Wortal > Newsy
Gabrielx
Jeśli do zmiennej w skrypcie PHP przypiszemy następującą wartość numeryczną: 2.2250738585072011e-308, to jest spora szansa na to, że skrypt najpierw pożre 100% zasobów procesora, a potem zaliczy crasha. Błąd jest o tyle uciążliwy, że za jego pomocą można zawieszać większość internetowych webaplikacji napisanych w PHP ? wystarczy przekazać powyższą liczbę w URL-u jako parametr GET.

2.2250738585072011e-308: PHP x87 FPU bug

Za DoS w PHP odpowiedzialna jest funkcja zend_strod() konwertująca liczby zmiennoprzecinkowe. Wprowadza ona systemy Linux, Windows i FreeBSD w nieskończoną pętlę. Na atak podatne są architektury wykorzystujące koprocesor FPU z zestawem instrukcji x87 (o ile PHP nie skompilowano z flagami: -mfpmath=sse lub -ffloat-store, bo tak naprawdę całemu złu winny jest bug w gcc).


Więcej na www.niebezpiecznik.pl
rocktech.pl
U mnie podatny.

Kod
PHP 5.3.3 (cli)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans


Kod
Linux linux-mnro 2.6.34.7-0.7-desktop #1 SMP PREEMPT 2010-12-13 11:13:53 +0100 i686 athlon i386 GNU/Linux


Poza takimi kwasami będącymi zabezpieczeniem.

  1. if (strpos(str_replace('.', '', serialize($GLOBALS)), '22250738585072011')!==false) die();


Najbardziej rozsądne wydaje się gdzieś w httpd.conf coś takiego ~

Kod
<LocationMatch ".*011e.*>
   deny from all
</LocationMatch>


Oczywiście rozwiązanie na szybko przydatne versus script kiddie smile.gif

Albo radykalniej.

Kod
<LocationMatch ".*\d+e\-\d+.*>
   deny from all
</LocationMatch>

Deallas
@Gabrielx
Zapomniałeś dodać, że luka dotyczy tylko systemów 32 bitowych
Gabrielx
Cytat(Deallas @ 6.01.2011, 13:57:30 ) *
@Gabrielx
Zapomniałeś dodać, że luka dotyczy tylko systemów 32 bitowych


Reszta jest w rozwinięciu artykułu ;]
Cysiaczek
Cytat
Zapomniałeś dodać, że luka dotyczy tylko systemów 32 bitowych


Ja mam 64 bitowy i też się powiesił smile.gif
throw.pl
No coś Ty? Jakim cudem?
kwiateusz
bo mógł miec 32bitową binarke php smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.