
CVE-2024-23113 の FortiGate FGFM サービスにおける書式文字列の脆弱性を検出し、ポート 541 の SSL 接続を介して細工したペイロードを送信し、RCE の影響を受けやすいかどうかを確認します。
このスクリプトは、CVE-2024-23113(FortiGate FGFMサービス(FortiGateとFortiManager間のプロトコル)のTCPポート541で動作するフォーマット文字列の脆弱性)を検出するために設計されています。この脆弱性は、攻撃者がフォーマット文字列を制御できるために発生し、リモートコード実行(RCE)やその他の意図しない動作を引き起こす可能性があります。FGFMサービスは、FortiGateデバイスとFortiManager間の設定管理のための通信を可能にしますが、パッチが適用されていないバージョンでは入力の処理が不適切であり、フォーマット文字列エクスプロイトの影響を受けやすくなっています。
Network Connection Setup:
スクリプトはまず、ターゲットのポート541に対してSSL/TLS接続を確立します。
自己署名証明書を持つデバイスの可能性があるため、証明書検証を無効にしたssl.SSLContextオブジェクトを使用して接続を確立します。
Payload Construction:
接続が確立されると、スクリプトはフォーマット文字列エクスプロイト(authip=%n)を使用した悪意のあるペイロードを作成します。%nディレクティブは、それまでに出力されたバイト数を変数に書き込むようシステムに指示し、これによりメモリ破壊が発生する可能性があります。
作成されたペイロードは、確立された接続を介してターゲットに送信されます。
Detection Logic:
スクリプトは、ペイロードに対するターゲットの動作を確認します。
接続が突然終了され、SSLアラートが発生した場合、フォーマット文字列脆弱性の保護メカニズム(例:glibcの_FORTIFY_SOURCE)がトリガーされたため、ターゲットが脆弱である可能性があります。
接続が開いたままの場合、ターゲットはパッチが適用されている可能性が高いです。
Run the Script:
Python 3で以下のコマンドを実行してスクリプトを起動します。
sh
python check_vulnerability.py
Enter Hostname/IP:
脆弱性を確認するホスト名またはIPアドレスの入力を求められます。
終了するには、exitと入力します。
Output:
ターゲットが脆弱な場合、スクリプトは以下のように出力します。
[!] Warning: is vulnerable!
パッチが適用されている場合、以下のように出力します。
[+] <hostname> appears to be patched.
Python 3がスクリプトを実行するマシンにインストールされていること。
ターゲットデバイスへのネットワークアクセスがあり、ポート541が開いていること。
ターゲットデバイスでFGFMサービスが動作していること。