Orange Livebox 2.0 (ZTE) – Niegroźny błąd Buffer Overflow & Information Disclosure

Kilka słów o tym, jak kończy się brak pamięci o walidacji jednego pola po stronie aplikacji internetowej (czyli de facto wykorzystanie tylko walidacji danych po stronie klienta) oraz dlaczego nie warto podłączać dysków USB do routera.

 

Bohater dzisiejszego wpisu – Orange Livebox 2.0 (producent ZTE).

Post dotyczy słabości w wersji oprogramowania o identyfikatorze 2013-02-21_V6.1.27. Cały plik version.txt (wersje komponentów firmware) znajduje się tutaj.

Buffer Overflow

Skuteczne wykorzystanie podatności wymaga zalogowania do panelu administracyjnego oraz ręczną modyfikację żądania zmiany SSID sieci Wi-Fi.

Wymagania te wykluczają zdalny atak na urządzenie, pod warunkiem, że panel administracyjny nie jest udostępniony do Internetu (a jeżeli jest, to domyślne poświadczenia muszą być zmienione na silniejsze).

Domyślna konfiguracja nie zezwala na zdalne połączenia do interfejsu zarządzającego.

Błąd występuje w funkcji przetwarzającej zmianę nazwy sieci WiFi (przypomnienie: sieć Wi-Fi może mieć nazwę o maksymalnej długości 32 znaków). Długość ciągu nie jest sprawdzana po stronie aplikacji, a sam bufor jest kopiowany za pomocą podatnej funkcji, najprawdopodobniej czymś podobnym do funkcji strcpy().

Po wpisaniu odpowiednio długiego ciągu (testowany ciąg miał 136 znaków) w parametrze SSID następuje nadpisanie adresu powrotu z ramki stosu i ponowne uruchomienie urządzenia (atak DoS).

Również za pomocą modyfikacji żądania można ustawić nazwę sieci na zastrzeżoną przez Orange: “Orange_FunSpot”. Co ciekawe jest to jedyne pole, które nie jest walidowane po odebraniu danych od klienta.

Dodatkowo, sieć bezprzewodowa do momentu zmiany nazwy na poprawną i kolejnego restartu routera jest wyłączona.

Przykładowe żądanie powodujące przepełnienie bufora:
POST /sysbus/NeMo/Intf/wl0:setWLANConfig HTTP/1.1 Host: 192.168.1.1 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.4.0 Accept: text/javascript Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate X-Requested-With: XMLHttpRequest X-Prototype-Version: 1.7 Content-Type: application/x-sah-ws-1-call+json; charset=UTF-8 X-Context: ch5QH4EdRvNoEiwgxVzVkOcTjRZjL7aMb3qIVUMBfnPJwbPRUdC4RCKYjz8Tt8tu Referer: http://192.168.1.1/configWifiNetworkSsid.html Content-Length: 187 Cookie: 36a10c45/zoom-accessibility=small; 36a10c45/contrast-accessibility=contrast1; 36a10c45/language=pl; 36a10c45/possibleLanguages=en,pl; 36a10c45/sessid=DwcUERQHk/q571gUrKkGpWzc; 36a10c45/context=ch5QH4EdRvNoEiwgxVzVkOcTjRZjL7aMb3qIVUMBfnPJwbPRUdC4RCKYjz8Tt8tu; 36a10c45/login=admin; 36a10c45/expirydate=Sat Nov 21 2015 16:14:08 GMT+0100 (CET); 36a10c45/WanInterfaceConfig=DSL Connection: keep-alive Pragma: no-cache Cache-Control: no-cache

{“parameters”:{“mibs”:{“wlanvap”:{“wl0”:{“SSID”:”AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”}}}}}

W bardzo prosty sposób możemy dowiedzieć się co nasi domownicy podłączali do urządzenia podczas naszej nieobecności oraz jakie katalogi znajdowały się na dyskach USB.

Wystarczy wpisać w przeglądarce http://192.168.1.1/sysbus/ (zwykłe żądanie GET, nie wymaga uwierzytelniania) i pobrać oferowany plik. Jest to, dosyć duży, zrzut informacji z API urządzenia w JSONie, dlatego polecam go przeglądać w dedykowanym narzędziu.

Plik wyciągnięty z mojego LiveBox’a do badań znajduje się tutaj.

Ciekawą właściwością tych informacji jest to, że dane o katalogach są zapisane na stałe w pamięci urządzenia i wykazują odporność na restartowanie urządzenia (przywracania do ustawień fabrycznych nie testowałem). Może to być ciekawy punkt wyjścia do badania Livebox’ów zakupionych na Allegro 😉

Po kontakcie z CERT Orange potwierdzono, że błąd Buffer Overflow nie występuje w najnowszej wersji oprogramowania. Wystarczy więc zaktualizować firmware w routerze za pomocą panelu administracyjnego i błąd zostanie wyeliminowany.

Niestety nie posiadam informacji jak wygląda sprawa ujawniania katalogów urządzeń podłączonych przez USB.