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

root na TP-linku przez… kontrolę rodzicielską

20 lipca 2016, 12:39 | Teksty | komentarzy 19

W ostatnim odcinku braliśmy na warsztat 2 modele TP-Link Archer – był tam nieuwierzytelniony root. Tym razem temat trochę trudniejszy do wykrycia ale na pewno przydatny dla badaczy bezpieczeństwa TP-Linków. Weźmy tym razem do zabawy router WDR4300 (swoją drogą bardzo wdzięczny obiekt do w miarę uniwersalnych badań po dużej liczbie urządzeń tego producenta):

wdr4300

Czy wiecie jak zazwyczaj działa na urządzeniach sieciowych kontrola rodzicielska (np. filtrowanie URLi pod względem występowania pewnych słów kluczowych)? Zgadliście – z wykorzystaniem  firewalla na działającym pod spodem Linuksie (najczęściej iptables). W interfejsie wygląda to tak:

parent1

I dalej tak:

parent_details

Natomiast na routerze istnieje magiczny plik /tmp/wr741n/parent.sh (jak się można domyślić odpalany z uprawnieniami roota) o zawartości jak poniżej:

inj1

Widzicie już o co chodzi w całej zabawie? Tak jest – parametr przekazywany z interfejsu webowego, do tego skryptu nie jest w żaden sposób walidowany. No dobra, jest:

inj2

Ale tą prostą walidację kliencką można ominąć na 10 różnych sposobów, np. tak:

burp

I finalny wynik:

ping_final

Udało mi się też tym zrobić interaktywnego shella co nie jest jakoś strasznie skomplikowane – w szczególności kiedy mamy odpowiednią binarkę skompilowaną na MIPS-a (zobaczcie np. zabawy z nart.out opisywane tutaj).

Początkowo wstrzyknąłem polecenie reboot – router się zrebootował, ale wcześniej zapisał konfigurację. Przy starcie urządzenia, konfiguracja jest wczytywana i kolejny reboot. W skrócie klops i zbrickowany router. Jak zdebrickować? O tym może w którymś z kolejnych odcinków.

Podatność została zgłoszona do TP-Link w lutym 2016.

PS
ciąg dalszy nastąpi.

–Michał Sajdak, od czasu do czasu bawi się urządzeniami sieciowymi, w wolnych chwilach realizuje testy penetracyjne w Securitum.

 

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. chesteroni

    reboot w autostarcie – coś pięknego :)

    Odpowiedz
    • No też się ucieszyłem, a 20 sekund później wkurzyłem. Ale przynajmniej czegoś nowego się można było nauczyć :)

      Odpowiedz
      • AdNEt

        NIGDY!!! Nie wpisujcie komand typu 'reboot’ 'shutdown’ 'rm-fr’ etc.
        Juz lepiej 'ping’ albo 'ls’ lub 'cat’

        Zadziala tak samo a bedzie mniej problemow…

        Odpowiedz
        • Tak, tylko problem jest jak nie widać od razy wyniku (na response). Ping jest dobry, ale czasem są limity długości wstrzykiwanego ciągu (reboot – idealny ;).

          Odpowiedz
          • manto

            sugeruję 'touch /du_a’

  2. Błąd (brak walidacji) oczywiście pozostaje błędem, ale… jaki jest praktyczny sens takiego ataku? W ogóle można zarządzać kontrolą rodzicielską nie posiadając najwyższych uprawnień na tym urządzeniu? I w ilu przypadkach zarządza tym inna osoba, niż admin (jeśli w ogóle taka możliwość istnieje)?

    Odpowiedz
    • Research. Mały hint na początek – np. pewne moduły do jądra na tym WDR4300 są dokładnie takie same jak na nowiutkich TP-Linkach.

      Odpowiedz
      • No i co z tego? Nawet Tomato i pochodne mają tak, że pewne ustawienia są zapisywane w generowanych skryptach, w RAMie (folder /tmp jest tam ładowany) albo jako zmienne w NVRAM, a walidacja formularzy jest zrealizowana w JS. Aby mieć dostęp do trzewi routera trzeba być adminem, więc co to niby za „hacking”?

        Odpowiedz
        • Patrz poprzednia odpowiedź.

          Odpowiedz
          • Filip

            Nie możesz tak pisać. Ktoś się zapętli i klops.

      • Tyle, że producent daje informację o licencji (GPL). W moim TP-Linku była wręcz na papierze. Więc teoretycznie możecie po prostu poprosić producenta o źródła. Inna sprawa, czy będą zgodne z używaną wersją, no i pełny, żywy ekosystem to jednak coś troszkę innego, niż źródła.

        Tak czy inaczej warto zaznaczyć w artykule, że opisywana „dziura” to jedynie ciekawostka dla badaczy/testerów, bo czytając artykuł można odnieść wrażenie, że chodzi o coś innego.

        W zasadzie nie tyle „root” (bo żeby go uzyskać trzeba już „roota” mieć), tylko dostęp do powłoki. Coś jak ukryte menu w niektórych switchach (i nagle „smart” switch staje się pełnoprawnym zarządzalnym…).

        Odpowiedz
        • Z tą licencją GPL to wiesz jak jest – publikują otwarte firmwarey, ale mają trochę modułów do jądra (wydaje się że komercyjne) do których nie ma sorsów, to samo np. z serwerem http czy innymi istotnymi usługami. Chyba wg GPLa można tak robić?

          Odpowiedz
  3. TomekG

    TP-link to dobry cel do badań, gdzie się nie włoży rąk to się coś znajdzie. Hardware ok, ale bałbym się to zostawić z oryginalnym softem w domu.

    Odpowiedz
  4. Panas

    A jakie to antenki macie podłączone do tego routera na zdjęciu?
    Jakaś samoróbka? Też bym coś mocniejszego podłączył.

    Odpowiedz
    • Yyyy, antenki zostały zdjęte i są tam gołe gniazda na anteny :) Taki domowy sposób na ograniczenie zasięgu WiFi ;)

      Odpowiedz
      • Panas

        Hehe, wieczorem po pracy to nawet kabel LAN z anteną można pomylić. :)

        Odpowiedz
  5. Oi

    Kiedyś na meetupie pokazywałeś taką podatność, że wgrywało się plik w zipie na serwer i przez podgląd możliwy był directory traversal. Czy jest gdzieś na sekuraku opis tej podatności? bo jakoś się nie moge doszukać

    Odpowiedz

Odpowiedz na sekurak