
Ce dépôt fournit un contenu d'ingénierie de détection prêt pour la production pour **CVE-2025-25257**, une vulnérabilité d'injection SQL sans authentification préalable dans Fortinet FortiWeb Fabric Connector versions 7.0 à 7.6.x. Une exploitation réussie peut conduire à une exécution de code à distance sans aucune authentification préalable.
Ce référentiel fournit du contenu d'ingénierie de détection prêt pour la production pour CVE-2025-25257, une vulnérabilité d'injection SQL sans authentification dans Fortinet FortiWeb Fabric Connector, versions 7.0 à 7.6.x. Une exploitation réussie peut conduire à une exécution de code à distance sans aucune authentification préalable.
Ce contenu est destiné uniquement à un usage défensif. Il est conçu pour les équipes de centre d'opérations de sécurité (SOC), les ingénieurs en détection et les chasseurs de menaces. Aucun code d'exploitation militarisé n'est inclus.
CVE-2025-25257 affecte le point de terminaison API Fabric Connector /api/fabric/device/status dans FortiWeb. L'en-tête Authorization est transmis directement dans une requête SQL sans assainissement. Un attaquant non authentifié peut injecter une syntaxe SQL dans la valeur du jeton Bearer pour manipuler la requête sous-jacente, contourner l'authentification et, dans certaines configurations, parvenir à une exécution de code à distance via des commandes SQL empilées ou des primitives d'écriture de fichiers.
La vulnérabilité est exploitable sur le réseau sans identifiants. Elle est trivialement détectable dans les journaux d'accès HTTP si la collecte de journaux est en place.
L'attaquant envoie une requête HTTP GET spécialement conçue à l'API Fabric Connector. Le jeton Bearer dans l'en-tête Authorization contient du SQL injecté. Exemple de schéma :
Authorization: Bearer aaa' OR '1'='1
Cela amène la requête SQL backend à s'évaluer comme vraie, contournant la validation du jeton. Une exploitation plus poussée peut impliquer une injection basée sur UNION pour lire des données ou des requêtes empilées pour écrire des fichiers ou exécuter des commandes système, selon la configuration et les privilèges de la base de données.
Ce qui suit est documenté uniquement pour la validation des règles de détection.
GET /api/fabric/device/status HTTP/1.1
Host: <fortiweb-ip>
Authorization: Bearer aaa' OR '1'='1
Les règles de détection de ce référentiel sont réglées pour identifier ce schéma et d'autres schémas d'injection similaires dans les journaux HTTP et le trafic réseau.
Les règles YARA se trouvent dans rules/yara/.
cve_2025_25257_http.yar - Détecte les schémas d'exploitation dans les fichiers journaux HTTP et le trafic capturécve_2025_25257_webshell.yar - Détecte les web shells potentiellement déposés après exploitationcve_2025_25257_payload.yar - Détecte les artefacts de charge utile brute sur disqueAnalyser les journaux d'accès HTTP :
yara -r rules/yara/cve_2025_25257_http.yar /var/log/fortiweb/
Analyser la racine web pour les fichiers déposés :
yara -r rules/yara/cve_2025_25257_webshell.yar /var/www/html/
Analyser une capture PCAP :
yara rules/yara/cve_2025_25257_http.yar capture.pcap
Exécuter toutes les règles de manière récursive sur un répertoire :
yara -r rules/yara/ /path/to/scan/
Les requêtes KQL se trouvent dans rules/kql/. Chaque fichier cible une catégorie de détection spécifique.
Les règles Sigma se trouvent dans rules/sigma/. Elles peuvent être converties vers n'importe quel format SIEM à l'aide de sigma-cli ou pySigma.
Convertir vers Splunk SPL :
sigma convert -t splunk rules/sigma/cve_2025_25257_sqli.yml
Convertir vers Elastic EQL :
sigma convert -t elasticsearch rules/sigma/cve_2025_25257_sqli.yml
Sur la CLI de l'appliance FortiWeb :
get system status | grep Version
Affecté : 7.0.x à 7.6.0
Corrigé : 7.6.1 et versions ultérieures
Un proxy inverse Nginx de base simulant le point de terminaison vulnérable peut être utilisé pour les tests de détection. Aucune image FortiWeb réelle n'est requise pour la validation de la détection basée sur les journaux.
# Tirer le conteneur du laboratoire de test
docker run -d \
--name fortiweb-sim \
-p 8443:443 \
-v $(pwd)/src/lab/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx:alpine
# Envoyer une requête d'exploitation simulée
curl -k -H "Authorization: Bearer aaa' OR '1'='1" \
https://localhost:8443/api/fabric/device/status
Cela générera une entrée de journal d'accès correspondant aux schémas de détection de D-01.
Après avoir envoyé la requête de test, vérifier la sortie du journal simulé :
docker logs fortiweb-sim | grep "fabric/device/status"
Schéma d'entrée de journal attendu :
"GET /api/fabric/device/status HTTP/1.1" 401 - "Bearer aaa' OR '1'='1"
Exécuter la règle YARA sur le journal :
yara rules/yara/cve_2025_25257_http.yar /var/log/nginx/access.log
Sortie attendue :
CVE_2025_25257_SQLi_AuthHeader /var/log/nginx/access.log
cve-2025-25257-detection/
├── README.md
├── LICENSE
├── .gitignore
├── rules/
│ ├── yara/
│ │ ├── cve_2025_25257_http.yar
│ │ ├── cve_2025_25257_webshell.yar
│ │ └── cve_2025_25257_payload.yar
│ ├── kql/
│ │ ├── 01_web_exploitation.kql
│ │ ├── 02_process_spawn.kql
│ │ ├── 03_command_execution.kql
│ │ ├── 04_file_creation.kql
│ │ ├── 05_persistence.kql
│ │ ├── 06_config_modification.kql
│ │ └── 07_threat_hunting.kql
│ ├── sigma/
│ │ ├── cve_2025_25257_sqli.yml
│ │ └── cve_2025_25257_process_spawn.yml
│ └── splunk/
│ ├── web_exploitation.spl
│ └── process_anomaly.spl
├── docs/
│ ├── iocs.md
│ ├── mitre_attack.md
│ └── false_positive_analysis.md
├── src/
│ ├── poc.py
│ └── lab/
│ └── nginx.conf
└── sysmon/
└── sysmon_config_snippet.xml
Ce référentiel est fourni uniquement à des fins défensives et éducatives. Tout le contenu de détection est destiné à aider les équipes de sécurité à identifier et à répondre aux tentatives d'exploitation. N'utilisez aucun contenu de ce référentiel contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite de tester.
Ce projet est sous licence MIT. Voir LICENSE pour plus de détails.
| Champ | Détail |
|---|
| CVE | CVE-2025-25257 |
| EDB-ID | 52473 |
| Produit | Fortinet FortiWeb |
| Versions affectées | 7.0.x à 7.6.x |
| Type de vulnérabilité | Injection SQL sans authentification conduisant à une RCE |
| Vecteur d'attaque | Point de terminaison API HTTP (sans authentification) |
| Authentification requise | Aucune |
| Score CVSS | 9.8 (Critique) |
| Correctif disponible | Oui, mise à niveau vers 7.6.1 ou version ultérieure |
| Publiée | 2026-02-04 |
| Chercheur | Milad Karimi (Ex3ptionaL) |
| ID | Catégorie | Méthode de détection | Source | Niveau de couverture |
|---|
| D-01 | Exploitation de requête Web | Schéma SQLi dans l'en-tête Authorization | Journaux Web / Proxy, WAF | Élevé |
| D-02 | Exploitation de requête Web | Requêtes vers /api/fabric/device/status sans jeton valide | Journaux Web | Élevé |
| D-03 | Anomalie d'exécution de processus | Processus shell généré par le processus du serveur web | EDR / Sysmon | Élevé |
| D-04 | Anomalie d'exécution de processus | sh, bash, python comme processus enfant de nginx ou httpd | EDR | Élevé |
| D-05 | Création de fichier suspecte | Web shell écrit dans la racine web de FortiWeb | EDR / Intégrité des fichiers | Moyen |
| D-06 | Création de fichier suspecte | Fichiers .php, .jsp, .py inattendus dans les répertoires web | Surveillance des fichiers | Moyen |
| D-07 | Mécanisme de persistance | Modification de tâche cron post-exploitation | EDR / Auditd | Moyen |
| D-08 | Mécanisme de persistance | Nouveau compte administrateur créé via l'API après SQLi | Journaux API / Authentification | Élevé |
| D-09 | Activité conteneur | Processus anormal dans l'espace de noms du conteneur FortiWeb | Runtime de conteneur | Moyen |
| D-10 | Chasse aux menaces | Écart de référence dans le taux d'appels à l'API Fabric Connector | SIEM / Analytique | Moyen |
| D-11 | Chasse aux menaces | Adresses IP source générant des schémas répétés 200/403 vers /api/fabric/ | Journaux Web | Élevé |
| D-12 | Altération de configuration | Modifications des fichiers de configuration FortiWeb après une requête web | Intégrité des fichiers / EDR | Élevé |
| D-13 | Altération de configuration | Écritures inattendues vers /data/ ou /etc/ sur l'appliance | Auditd / EDR | Moyen |
| Fichier | Description |
|---|
01_web_exploitation.kql | Schémas d'injection SQL dans l'en-tête Authorization |
02_process_spawn.kql | Processus enfants anormaux du serveur web |
03_command_execution.kql | Chaînes d'exécution de commandes suspectes |
04_file_creation.kql | Écritures de fichiers inattendues dans les répertoires web |
05_persistence.kql | Indicateurs de mécanisme de persistance |
06_config_modification.kql | Altération des fichiers de configuration |
07_threat_hunting.kql | Requête avancée de chasse aux menaces |