
Sicherer, nicht-intrusiver Scanner, der die FortiOS-SSL-VPN-Out-of-Bounds-Write-Schwachstelle (CVE-2024-21762) erkennt, indem normale und gechunkte HTTP-POST-Antworten verglichen werden.
| Feld | Wert |
|---|
| CVE | CVE-2024-21762 |
| Sicherheitshinweis | FG-IR-24-015 |
| CVSS | 9.8 (Kritisch) |
| CWE | CWE-787 (Schreiben außerhalb der Grenzen) |
| CISA KEV | Ja - aktiv in freier Wildbahn ausgenutzt |
| Angriffsvektor | Netzwerk (ohne Authentifizierung) |
| Betroffene Komponente | sslvpnd (SSL-VPN-Daemon) |
Eine Schwachstelle durch Schreiben außerhalb der Grenzen im FortiOS SSL VPN ermöglicht es einem entfernten, nicht authentifizierten Angreifer, beliebigen Code oder Befehle über speziell gestaltete HTTP-Anfragen auszuführen. Die Schwachstelle befindet sich im HTTP-Chunked-Transfer-Encoding-Parser innerhalb von sslvpnd. Wenn der Daemon eine POST-Anfrage mit Transfer-Encoding: chunked empfängt, validiert er die Blockgrößen nicht ordnungsgemäß, was zu einem Schreiben außerhalb der Grenzen im Heap führt.
| Zweig | Betroffen | Behoben |
|---|---|---|
| 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 | Alle Versionen | Migrieren |
Das Skript vergleicht die Serverantwort auf eine normale POST-Anfrage mit einer POST-Anfrage mit Transfer-Encoding: chunked an denselben gültigen Endpunkt (/remote/logincheck).
Content-Length: Der Server verarbeitet die Anfrage und gibt eine HTTP-Antwort (200 OK) zurück.Transfer-Encoding: chunked: Bei anfälligen Versionen kann sslvpnd die Chunked-Kodierung nicht verarbeiten und schließt die Verbindung, ohne zu antworten (0 Bytes).Dieses unterschiedliche Verhalten bestätigt die Schwachstelle, ohne das eigentliche Schreiben außerhalb der Grenzen auszulösen.
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)
============================================================
| Ergebnis | Bedeutung |
|---|---|
VULNERABLE | Normale POST-Anfrage antwortet, Chunked-POST-Anfrage bricht die Verbindung ab |
PATCHED | Beide Anfragen erhalten eine HTTP-Antwort |
INCONCLUSIVE | Keine der beiden Anfragen erhielt eine Antwort (Ratenbegrenzung aktiv, später erneut versuchen) |
/remote/logincheck eine Ratenbegrenzung aktivieren. Wenn Sie INCONCLUSIVE erhalten, warten Sie einige Minuten und versuchen Sie es erneut./remote/VULNCHECK als Endpunkt. Dieser Pfad gibt möglicherweise nicht auf allen FortiGate-Versionen den erwarteten 403-Status zurück, was zu unzuverlässigen Ergebnissen führt. Dieses Skript verwendet /remote/logincheck, einen bekannten gültigen SSL-VPN-Endpunkt.