Czytanie zawartości katalogów chronionych open_basedir

Łukasz Pilorz, 15 February 2007

Kilka tygodni temu natknąłem się przypadkiem na taki błąd w skrypcie PHP (4.4.1/5.5.1):

Warning: glob(): open_basedir restriction in effect. File(../adam) is not within the allowed path(s): ([...]) in /var/www/lukasz/script.php on line 5

Spowodowany był wywołaniem funkcji glob(’../*’), gdy katalog nadrzędny nie był objęty listą dozwolonych ścieżek w open_basedir. Ciekawe jest, że w błędzie mamy informację o pliku, do którego nie mamy dostępu, pomimo że jego nazwa nie jest określona w parametrze funkcji. Możemy w takim razie próbować dalej - glob(’../a*’) :

Warning: glob(): open_basedir restriction in effect. File(../adam) is not within the allowed path(s): ([...]) in /var/www/lukasz/script.php on line 5

glob(’../b*’) - brak błędu… glob(’../c*’):

Warning: glob(): open_basedir restriction in effect. File(../cgi) is not within the allowed path(s): ([...]) in /var/www/lukasz/script.php on line 5

Przy pewnej dozie cierpliwości można zatem uzyskać informację o zawartości katalogu chronionego przez open_basedir. Skrypt, który można znaleźć tutaj, robi to za pomocą ob_get_contents(), z dokładnością jednego pliku na daną literę w katalogu.

Luka ta jest niezbyt groźna. Ma znaczenie przede wszystkim na współdzielonych serwerach hostingowych - te zaś, jeśli stosują open_basedir jako jedyne zabezpieczenie, mają znacznie poważniejsze problemy (PHP ma długą historię zgłoszeń dotyczących bezpieczeństwa tej opcji). Jak się okazało, półtora roku przede mną tę samą lukę odkrył Peter Brodersen: http://seclists.org/fulldisclosure/2005/Sep/0001.html.

Aktualizacja (15 lutego): Polecam też notkę Open_basedir confusion na blogu Stefana Essera.

Samy dostał trzy lata

Łukasz Pilorz, 4 February 2007

Przypuszczam, że większość z osób, które tu trafiają słyszała o ataku “samy is my hero”. Był to pierwszy atak XSS o cechach robaka (łańcuchowy/wirusowy atak XSS). W ciągu doby zmodyfikował profile ponad miliona użytkowników MySpace. Na stronach SC Magazine można przeczytać zakończenie tej historii. Twórca robaka został skazany na trzy lata nadzoru kuratora, 90 dni robót publicznych, rekompensatę finansową i zakaz dostępu do internetu.