
安全で非侵襲的なスキャナで、通常のHTTP POSTレスポンスとチャンク化されたHTTP POSTレスポンスを比較して、FortiOS SSL VPNの領域外書き込みの脆弱性(CVE-2024-21762)を検出します。
| フィールド | 値 |
|---|---|
| CVE | CVE-2024-21762 |
| アドバイザリ | FG-IR-24-015 |
| CVSS | 9.8 (Critical) |
| CWE | CWE-787 (Out-of-bounds Write) |
| CISA KEV | Yes - 野外で活発に悪用されている |
| 攻撃ベクトル | ネットワーク(認証不要) |
| 影響を受けるコンポーネント | sslvpnd(SSL VPNデーモン) |
FortiOS SSL VPNの範囲外書き込み脆弱性により、リモートの認証されていない攻撃者が特別に細工されたHTTPリクエストを介して任意のコードまたはコマンドを実行できる可能性があります。この脆弱性は、sslvpnd内のHTTPチャンク転送エンコーディングパーサーに存在します。デーモンがTransfer-Encoding: chunkedを含むPOSTリクエストを受信すると、チャンクサイズを適切に検証できず、ヒープ上の範囲外書き込みが発生します。
| ブランチ | 影響を受けるバージョン | 修正バージョン |
|---|---|---|
| FortiOS 7.4 | 7.4.0 - 7.4.2 | 7.4.3 |
| FortiOS 7.2 | 7.2.0 - 7.2.6 | 7.2.7 |
| FortiOS 7.0 | 7.0.0 - 7.0.13 | 7.0.14 |
| FortiOS 6.4 | 6.4.0 - 6.4.14 | 6.4.15 |
| FortiOS 6.2 | 6.2.0 - 6.2.15 | 6.2.16 |
| FortiOS 6.0 | 全バージョン | 移行 |
このスクリプトは、通常のPOSTリクエストと、Transfer-Encoding: chunkedを含むPOSTリクエストに対するサーバーの応答を、同じ有効なエンドポイント(/remote/logincheck)に対して比較します。
Content-Lengthあり):サーバーはリクエストを処理し、HTTP応答(200 OK)を返します。Transfer-Encoding: chunkedあり):脆弱なバージョンでは、sslvpndがチャンクエンコーディングを処理できず、応答なしで接続を閉じます(0バイト)。この動作の差異により、実際の範囲外書き込みをトリガーすることなく脆弱性を確認できます。
Normal POST --> HTTP/1.1 200 OK (N bytes)
Chunked POST --> Connection closed (0 bytes) <-- VULNERABLE
Normal POST --> HTTP/1.1 200 OK (N bytes)
Chunked POST --> HTTP/1.1 200 OK (N bytes) <-- PATCHED
python cve_2024_21762_safecheck.py <host> <port>
$ python cve_2024_21762_safecheck.py 10.0.0.1 8443
[*] Target: 10.0.0.1:8443
[*] CVE-2024-21762 - Out-of-Bounds Write in sslvpnd (CVSS 9.8)
[*] Method: Compare normal POST vs chunked POST response
[*] Test 1: Normal POST to /remote/logincheck
Response: HTTP/1.1 200 OK
Size: 722 bytes
[*] Test 2: Chunked POST to /remote/logincheck
Response: empty (connection closed by server)
============================================================
[!] VULNERABLE to CVE-2024-21762
Normal POST works but chunked TE causes connection
drop -> sslvpnd cannot handle chunked TE
Severity: CRITICAL (CVSS 9.8)
CISA KEV: Yes (actively exploited in the wild)
============================================================
| 結果 | 意味 |
|---|---|
VULNERABLE | 通常のPOSTが応答し、チャンクPOSTが接続を切断する |
PATCHED | 両方のリクエストがHTTP応答を受信する |
INCONCLUSIVE | どちらのリクエストも応答を受信しなかった(レート制限が有効な場合があるので、後で再試行してください) |
/remote/logincheckへの複数のPOSTリクエスト後にレート制限を有効にする可能性があります。INCONCLUSIVEが返された場合は、数分待ってから再試行してください。/remote/VULNCHECKを使用します。そのパスはすべてのFortiGateバージョンで期待される403を返さない可能性があり、信頼性の低い結果につながります。このスクリプトは、既知の有効なSSL VPNエンドポイントである/remote/logincheckを使用します。