CVE-2024-21762 - FortiOS SSL VPN: Schreiben außerhalb der Grenzen
Übersicht
| 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) |
Beschreibung
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.
Betroffene Versionen
Methodik des sicheren Checks
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).
- Normale POST-Anfrage mit
Content-Length: Der Server verarbeitet die Anfrage und gibt eine HTTP-Antwort (200 OK) zurück.
- Chunked-POST-Anfrage mit
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
Verwendung
python cve_2024_21762_safecheck.py <host> <port>
Beispiel
$ 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)
============================================================
Mögliche Ergebnisse
| 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) |
Hinweise
- Dieser Check nutzt die Schwachstelle nicht aus. Er erkennt nur das unterschiedliche Verhalten des HTTP-Parsers.
- Das Ziel kann nach mehreren POST-Anfragen an
/remote/logincheck eine Ratenbegrenzung aktivieren. Wenn Sie INCONCLUSIVE erhalten, warten Sie einige Minuten und versuchen Sie es erneut.
- Einige Drittanbieter-Skripte (z. B. der BishopFox-Check) verwenden
/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.
Referenzen