-15% na nową książkę sekuraka: Wprowadzenie do bezpieczeństwa IT. Przy zamówieniu podaj kod: 10000

Luka w TP-Linkach – więcej szczegółów

Podczas analizy dziur w TP-linkach opisywanych tutaj, udało mi się zlokalizować jeszcze kilka dodatkowych innych podatności, które umożliwiają finalnie uzyskanie root shella na urządzeniu w nieco inny sposób. Zobaczmy.
Standardowo router udostępnia usługę ftp. Jednak jest ona w pewien sposób chrootowana (nie możemy uzyskać dostępu poza wskazanym przez twórców urządzenia katalogiem):

ftp chroot

Zróbmy jednak mały trick. Po umieszczeniu w routerze pendrive z dowolnym folderem możemy go udostępnić przez ftp:

udostępnianie folderu

Udostępnianie folderu z USB

Kliknięcie przyciski „Save” generuje request HTTP jak poniżej. Request ten został przeze mnie przechwycony na lokalnym http proxy (darmowy burp suite) i następnie zmodyfikowany jak poniżej – tzw. path traversal:

path traversal

path traversal

Czym taka modyfikacja komunikacji http skutkuje? Możliwością uzyskania poprzez ftp dostępu na urządzeniu…również w trybie zapisu:

ftp path traversal

ftp path traversal

Ale jak uzyskać interaktywnego shella? Po rozglądnięciu się na urządzeniu, w katalogu /tmp/samba dostępny jest plik smb.conf (przez ftp jest możliwy do niego dostęp w trybie zapisu). Analiza dokumentacji do samby pokazuje wiele możliwości uruchomienia dowolnego polecenia z uprawnieniami root w OS, m.in.:

root preexec (S)

    This is the same as the preexec parameter except that the command is run as root. This is useful for mounting filesystems (such as CDROMs) when a connection is opened.

Jak widać, poza montowaniem CDROM-ów, opcja to może służyć do analizy routerów ;-) Zmodyfikowany plik smb.conf wygląda tak:

zmodyfikowany smb.conf

Zmodyfikowany smb.conf

/tmp/szel to po prostu binarka netcat skompilowana na architekturę MIPS oraz umieszczona na routerze za pomocą ftp (korzystając z wcześniejszej podatności). Pozostaje już tylko finalny test:

smb shell

Root shell

Interaktywny root-shell to zawsze ciekawy wynik, jednak jak się to może przydać do analizy przypadków takich jak ten?

Zobaczmy jak wyglądają wybrane ciągi znakowe w binarce httpd (którą można np. pobrać z wykorzystaniem wcześniejszego tricku z ftp):

http-server

Widzimy tutaj m.in. ciąg start_art.html – ale skąd wiadomo co się dzieje po jego uruchomieniu z przeglądarki? Zobaczmy w takim działające na routerze procesy (po wpisaniu w przeglądarkę: http://192.168.0.1/userRpmNatDebugRpm26525557/start_art.html):

tftp

Teraz jest wszystko jasne: 192.168.0.100 to mój adres IP, router pobiera nart.out i robi na nim chmod 777 a następnie uruchamia jako root…

Wykorzystanie tylko do celów edukacyjnych

–Michał Sajdak (michal.sajdak<at>securitum.pl)