Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Jak dostać nieuwierzytelnionego roota na firewallach Palo Alto? Prosto…
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
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.
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 ...
Hmmmm tak , chyba nie dojrzałem znaku równości ;)
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…
outsourcing do Chin
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ść?.