Jak dostać nieuwierzytelnionego roota na firewallach Palo Alto? Prosto…

13 grudnia 2017, 21:48 | W biegu | komentarzy 6
: zin o bezpieczeństwie - pobierz w pdf/epub/mobi.

Właśnie załatano podatność umożliwiającą wykonanie kodu jako root przez panel administracyjny firewalli Palo Alto (PAN-OS <= 6.1.18 , PAN-OS <=7.0.18, PAN-OS <=7.1.13 , PAN-OS <=8.0.6). Niepokojący jest na pewno fakt, że załatanie tej luki zajęło około 5 miesięcy, szczególnie że eksploit nie jest specjalnie skomplikowany i wymaga wysłania raptem kilku requestów HTTP.

Wykorzystanie podatności nie wymaga uwierzytelnienia, wymaga za to zdalnego dostępu do portu na którym działa panel zarządczy urządzenia. Niby nie powinien być on dostępny w Internecie, ale Shodan wie lepiej…

Sam producent opisuje to tak:

Through the exploitation of a combination of unrelated vulnerabilities, and via the management interface of the device, an attacker could remotely execute code on PAN-OS in the context of the highest privileged user.

Co to za magiczne „unrelated” vulnerabilities? W skrócie cała droga wygląda tak:

  • Korzystając z nieuwierzytelnionego skryptu można wpłynąć na zawartość sesji użytkownika (nie mamy konta więc sesja będzie anonimowa): /esp/cms_changeDeviceContext.esp?device=aaaaa:a%27";user|s."1337";
  • Co to za dziwna wartość zmiennej device? No więc umożliwia ona zmylenie parsera sesji użytkownika na firewallu, dzięki czemu sterujemy wartością zmiennej user w sesji (normalnie nie powinno być to możliwe). Jeśli użyjemy tutaj dobrej wartości, moduł uwierzytelnienia na web serwerze stwierdzi, że… jesteśmy uwierzytelnieni :)
  • Mając uwierzytelnienie, możemy wołać metody API dostępne tutaj: /php/utils/router.php
    Jedną z metod można następnie „zmusić” web serwer do stworzenia dowolnego katalogu na urządzeniu (np. /tmp/test)
  • Finalny krok polega na wykorzystaniu podatności w skrypcie uruchamianym z crona (/usr/local/bin/genindex_batch.sh) – który w pewnym uproszczeniu bierze nazwę katalogu (a katalogi o dowolnej nazwie możemy tworzyć – patrz poprzedni punkt) i używa go do uruchomienia innego polecenia – bez żadnej walidacji wartości, ale z uprawnieniami roota.
    W oryginalnym researchu tworzony jest taki katalog: * -print -exec python -c exec("[base64 code..]".decode("base64")) ;
  • Voilà:

–ms

 

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



Komentarze

  1. Mistle

    W wersji 8.0.6 Pan-OS podatność nie została poprawnie załatana.
    Niedawno wyszedł patch 8.0.6-h3 gdzie podobno w końcu załatali.

    Odpowiedz
    • Tak jest – zauważ że napisaliśmy że podatne są <= 8.0.6 - czyli goły 8.0.6 też, a zupdateowaliśmy to wczoraj po mailu oficjalnym który poszedł od Palo Alto, że coś im się nie spatchowało dobrze na 8.0.6 ...

      Odpowiedz
      • Mistle

        Hmmmm tak , chyba nie dojrzałem znaku równości ;)

        Odpowiedz
  2. Mikolaj Rampek

    Mnie tylko zastanawia jeden fakt, skad na urzadzeniach znanych marek, ktore zajmuja sie bezpieczenstwem takie banale bledy w bezpieczenstwie? Kadra, pospiech, celowe luki, brak testow? Szkolne, proste bledy, ktore popelnia poczatkujacy…

    Odpowiedz
  3. M3sh

    Spytam z ciekawości, skoro Palo już wydało patcha, to czemu przy Full Disclosure nie ma podanego kodu exploita, jest tylko sam opis jak działa podatność?.

    Odpowiedz

Odpowiedz