CVE-2024-21762 - Écriture hors limites dans le SSL VPN FortiOS
Vue d'ensemble
| 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) |
Description
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).
Versions concernées
Méthodologie de vérification sûre
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).
- POST normal avec
Content-Length : le serveur traite la requête et renvoie une réponse HTTP (200 OK).
- POST par blocs avec
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
Utilisation
python cve_2024_21762_safecheck.py <host> <port>
Exemple
$ 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ésultats possibles
| 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) |
Remarques
- Cette vérification n'exploite pas la vulnérabilité. Elle détecte uniquement le comportement différentiel de l'analyseur HTTP.
- La cible peut activer une limitation de débit après plusieurs requêtes POST vers
/remote/logincheck. Si vous obtenez INCONCLUSIVE, attendez quelques minutes puis réessayez.
- Certains scripts tiers (par exemple la vérification de BishopFox) utilisent
/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.
Références