
Analyseur sûr et non intrusif qui détecte la vulnérabilité d'écriture hors limites du SSL VPN FortiOS (CVE-2024-21762) en comparant les réponses HTTP POST normales et fragmentées.
| Champ | Valeur |
|---|---|
| CVE | CVE-2024-21762 |
| Avis | FG-IR-24-015 |
| CVSS | 9.8 (Critique) |
| CWE | CWE-787 (Écriture hors limites) |
| CISA KEV | Oui - activement exploitée dans la nature |
| Vecteur d'attaque | Réseau (non authentifié) |
| Composant concerné | sslvpnd (démon SSL VPN) |
Une vulnérabilité d'écriture hors limites dans le SSL VPN FortiOS permet à un attaquant distant non authentifié d'exécuter du code ou des commandes arbitraires via des requêtes HTTP spécialement conçues. La vulnérabilité réside dans l'analyseur de transfert par blocs (chunked transfer encoding) HTTP au sein de sslvpnd. Lorsque le démon reçoit une requête POST avec Transfer-Encoding: chunked, il ne valide pas correctement la taille des blocs, ce qui provoque une écriture hors limites dans le tas (heap).
| Branche | Affectée | Corrigée |
|---|---|---|
| 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 | Toutes les versions | Migrer |
Le script compare la réponse du serveur à une requête POST normale par rapport à une requête POST avec Transfer-Encoding: chunked vers le même point de terminaison valide (/remote/logincheck).
Content-Length : le serveur traite la requête et renvoie une réponse HTTP (200 OK).Transfer-Encoding: chunked : sur les versions vulnérables, sslvpnd ne peut pas gérer l'encodage par blocs et ferme la connexion sans répondre (0 octet).Ce comportement différentiel confirme la vulnérabilité sans déclencher l'écriture hors limites réelle.
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)
============================================================
| Résultat | Signification |
|---|---|
VULNERABLE | Le POST normal répond, le POST par blocs entraîne une fermeture de connexion |
PATCHED | Les deux requêtes reçoivent une réponse HTTP |
INCONCLUSIVE | Aucune des deux requêtes n'a reçu de réponse (limitation de débit active, réessayez plus tard) |
/remote/logincheck. Si vous obtenez INCONCLUSIVE, attendez quelques minutes puis réessayez./remote/VULNCHECK comme point de terminaison. Ce chemin peut ne pas renvoyer le 403 attendu sur toutes les versions de FortiGate, ce qui conduit à des résultats peu fiables. Ce script utilise /remote/logincheck, un point de terminaison SSL VPN connu et valide.