
FortiGate SSL VPNインスタンスがCVE-2023-27997に対して脆弱かどうかを、応答タイミングに基づいて安全に検出する
FortiGate SSL VPN インスタンスが CVE-2023-27997 に対して脆弱かどうかを、応答時間に基づいて安全に検出します。Bishop Fox のブログにある完全な解説記事(本ツールの背後にある手法の完全なウォークスルーを含む)を参照してください。
CVE-2023-27997 は FortiGate の SSL VPN コンポーネントにおけるヒープベースのバッファオーバーフローであり、認証前のリモートコード実行(RCE)に悪用可能であることが実証されています。これはメモリ破損のバグであるため、sslvpnd プロセスをクラッシュさせたり、アクティブなユーザーを切断したりせずに脆弱なバージョンを検出できるようにしたいと考えました。
このツールは、脆弱なURLパスに対して800件のリクエストを送信します。リクエストのうち半数は不正な長さを持ち、そのため新しいバージョンの FortiGate では拒否されます。これにより、有効な長さと無効な長さのリクエスト間に測定可能な時間差(テストしたデバイスでは約250マイクロ秒)が生じ、数学的な処理で検出できます。
リクエストサイズとデータ長フィールドは、脆弱なデバイスではメモリ破損が、使用中のデータが存在しないヒープ領域にのみ影響するように特別に選択されています。これにより、SSL VPN プロセスがクラッシュしないことが保証されます。
$ git clone https://github.com/BishopFox/CVE-2023-27997-check
$ cd CVE-2023-27997-check
$ python3 -m venv venv
$ source venv/bin/activate
$ python3 -m pip install -r requirements.txt
https://<IP>:<PORT> にある SSL VPN をスキャンします。ターゲットは Vulnerable、Patched、または Unknown のステータスを返す可能性があります。スキャンは通常30秒未満で完了しますが、大量のリクエストを送信するため、状況によっては最大5分かかる場合があります。
$ python3 CVE-2023-27997-check.py <IP> <PORT>
次の例では、example.com:10443 が CVE-2023-27997 に対して脆弱です。
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
Vulnerable
このツールはインターネット経由で測定されたタイミング情報に依存しており、ノイズの影響を受けやすいことに注意してください。結果が誤っている可能性がある場合、ツールは警告を表示します。
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
WARNING: Low confidence results.
Patched
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
WARNING: Low confidence results.
Unknown
WARNING: Low confidence results が表示される場合は、対象サーバーと地理的に可能な限り近い VPS を使用してインターネットノイズを減らすことを検討してください。
本ツールを事前の相互同意なしにターゲットへの攻撃に使用することは違法です。エンドユーザーは、該当するすべての現地法、州法、連邦法を遵守する責任を負います。開発者は一切の責任を負わず、このプログラムによって引き起こされた誤用や損害についても責任を負いません。