
Escáner seguro y no intrusivo que detecta la vulnerabilidad de escritura fuera de límites en FortiOS SSL VPN (CVE-2024-21762) comparando respuestas HTTP POST normales y fragmentadas.
| Campo | Valor |
|---|
| CVE | CVE-2024-21762 |
| Aviso | FG-IR-24-015 |
| CVSS | 9.8 (Crítico) |
| CWE | CWE-787 (Escritura fuera de límites) |
| CISA KEV | Sí - explotada activamente en la naturaleza |
| Vector de Ataque | Red (sin autenticar) |
| Componente Afectado | sslvpnd (demonio SSL VPN) |
Una vulnerabilidad de escritura fuera de límites en FortiOS SSL VPN permite a un atacante remoto no autenticado ejecutar código o comandos arbitrarios mediante solicitudes HTTP especialmente diseñadas. La vulnerabilidad reside en el analizador de codificación de transferencia fragmentada (chunked) HTTP dentro de sslvpnd. Cuando el demonio recibe una solicitud POST con Transfer-Encoding: chunked, no valida correctamente los tamaños de los fragmentos, lo que provoca una escritura fuera de límites en el montón.
| Rama | Afectadas | Corregidas |
|---|---|---|
| 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 | Todas las versiones | Migrar |
El script compara la respuesta del servidor a una solicitud POST normal frente a una solicitud POST con Transfer-Encoding: chunked al mismo endpoint válido (/remote/logincheck).
Content-Length: El servidor procesa la solicitud y devuelve una respuesta HTTP (200 OK).Transfer-Encoding: chunked: En versiones vulnerables, sslvpnd no puede manejar la codificación fragmentada y cierra la conexión sin responder (0 bytes).Este comportamiento diferencial confirma la vulnerabilidad sin desencadenar la escritura fuera de límites real.
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)
============================================================
| Resultado | Significado |
|---|---|
VULNERABLE | El POST normal responde, el POST fragmentado corta la conexión |
PATCHED | Ambas solicitudes reciben respuesta HTTP |
INCONCLUSIVE | Ninguna solicitud obtuvo respuesta (límite de tasa activo, reintentar más tarde) |
/remote/logincheck. Si obtienes INCONCLUSIVE, espera unos minutos y vuelve a intentarlo./remote/VULNCHECK como endpoint. Esa ruta puede no devolver el 403 esperado en todas las versiones de FortiGate, lo que lleva a resultados poco fiables. Este script utiliza /remote/logincheck, que es un endpoint SSL VPN válido conocido.