
Un escáner para la vulnerabilidad FortiNet CVE-2025-64446
Simple script auxiliar en Python para sondear objetivos Fortinet/FortiWeb en busca del patrón de bypass de autenticación fwbcgi reportado por watchTowr Labs. La inteligencia y los detalles de la solicitud provienen de: https://labs.watchtowr.com/when-the-impersonation-function-gets-used-to-impersonate-users-fortinet-fortiweb-auth-bypass/
python3 scanner.py http://192.168.9.1:80
python3 scanner.py -f targets.txt --find-forti --follow-redirects
Los objetivos deben incluir su esquema explícitamente (http:// o https://). Si se omite el puerto, el escáner asume 80 para HTTP o 443 para HTTPS. Genera una línea por objetivo con [+] VULNERABLE, [+] MAY BE VULNERABLE, [+] PATCHED, [+] POSSIBLY PATCHED o [-] INDETERMINATE; opcionalmente resalta palabras que contengan “forti”.
targets: una o más entradas <scheme>://<host>[:<port>] en la línea de comandos (los puertos por defecto son 80 para HTTP o 443 para HTTPS).-f/--targets-file: leer objetivos adicionales desde archivo(s); mismo formato <scheme>://<host>[:<port>].--timeout: tiempo de espera del socket en segundos (por defecto 5).--find-forti: imprimir tokens únicos que contengan “forti” que aparecieron en el cuerpo de la respuesta.--follow-redirects: manejo opcional de redirecciones para objetivos que emiten respuestas 30x.--max-redirects: límite de saltos de redirección cuando --follow-redirects está activo (por defecto 3, desactiva el seguimiento incluso si la bandera está presente).Debido a la falta de una infraestructura de pruebas decente, aquí está la suite de pruebas simple que utilicé.
PYTHONPYCACHEPREFIX=./.pycache python3 -m unittest discover -s tests
El escáner depende del soporte de TLS 1.2+ para comunicarse con sitios modernos de Fortinet o Cloudflare. Asegúrate de que el python3 que ejecutas esté vinculado contra una compilación reciente de OpenSSL:
/usr/bin/python3) está vinculado a LibreSSL 2.8 y no puede negociar TLS 1.3, lo que provoca errores TLSV1_ALERT_PROTOCOL_VERSION. Instala un intérprete moderno mediante Homebrew (brew install python) o pyenv y ejecuta el escáner con ese binario (por ejemplo, /opt/homebrew/bin/python3).python3 - <<'PY'\nimport ssl; print(ssl.OPENSSL_VERSION)\nPY. Si reporta algo más antiguo, instala un Python actualizado (pyenv, backports de la distribución, etc.).ssl.OPENSSL_VERSION si estás ejecutando dentro de WSL o un entorno virtual antiguo.Si debes ejecutar en un intérprete más antiguo, espera que los objetivos HTTPS que requieran TLS 1.3 fallen; los objetivos HTTP continúan funcionando independientemente.
0--validate-tls: forzar validación de certificados para objetivos HTTPS y redirecciones (el comportamiento predeterminado omite la validación para evitar bloqueos en certificados autofirmados).--workers: número de escaneos concurrentes a ejecutar mediante asyncio (por defecto 10).--user-agent: cabecera HTTP User-Agent personalizada (por defecto fwbcgi-scanner/1.0).--csv-output: escribir filas <target>,<classification> en el archivo CSV indicado además de la salida por consola.