Krótko wprowadzając, dystrybucja Trixbox to system, który z założenia ma pełnić funkcje centrali telefonicznej (za pomocą oprogramowania centrali o otwartym kodzie źródłowym Asterisk). Choć sama dystrybucja zasadniczo jest instalowana na maszynach w sieciach wewnętrznych, niedostępnych bezpośrednio z sieci Internet to do napisania niniejszej wiadomości skłoniło mnie opublikowanie błędu umożliwiającego uzyskanie uprawnień administratora (root) poprzez główny panel zarządzający całym systemem (WWW).
Pierwsza część błędu znajduje się w aplikacji WWW odpowiedzialnej za zarządzanie systemem. Istnieje możliwość przemycenia do zmiennej langChoice, wysłanej za pomocą metody POST, wartości innej niż zakłada aplikacja. Aby działała sztuczka ze znakiem %00 musimy posiadać wersję PHP nie odporną na tego typu atak. W dystrybucji Trixbox akurat z taką mamy do czynienia. Dodatkowo ustawienia PHP muszą umożliwiać nam wykonanie powyższych akcji – akurat w wypadku Trixboxa – umożliwiają.
Trik polega na przesłaniu danych sesyjnych, które zawierać będą złośliwy kod (choćby uruchomienie dowolnej komendy). Dane te – zostaną zapisane w pliku /tmp/sess_$idsesji. $idsesji jest nam znane. W związku z tym wracając do naszego początkowego błędu, załączamy plik znajdujący się lokalnie na serwerze langChoice=../../../../../../../../../../tmp/sess_$phpsessionid%00, a w nim znajdują się uprzednio przesłane dane. Oznaczają one tyle, że użytkownik asterisk będzie posiadał uprawnienia do uruchamiania powyższych poleceń z uprawnieniami administratora (poprzez systemowy wrapper sudo).
Najciekawsza jest tutaj ostatnia linijka, która oznacza tyle, że zalogowany jako użytkownik asterisk (użytkownik centralki telefonicznej) możemy uruchomić powłokę /bin/bash z uprawnieniami administratora (bez podawania nawet swojego hasła).
Znów reasumując. Wysyłamy zdalny kod na serwer, załączamy go do interpretera PHP i uruchamiamy. Za pomocą komendy: sudo /bin/bash uzyskujemy uprawnienia administratora [oklaski].
Dodaj komentarz