Questo repository fornisce contenuti di detection engineering pronti per la produzione per **CVE-2025-25257**, una vulnerabilità di SQL Injection pre-autenticazione in Fortinet FortiWeb Fabric Connector versioni dalla 7.0 alla 7.6.x. Lo sfruttamento riuscito può portare a Remote Code Execution senza alcuna autenticazione preventiva.
Questo repository fornisce contenuti di detection engineering pronti per la produzione per CVE-2025-25257, una vulnerabilità di SQL Injection pre-autenticazione in Fortinet FortiWeb Fabric Connector versioni 7.0 fino a 7.6.x. Lo sfruttamento riuscito può portare a Remote Code Execution senza alcuna autenticazione preventiva.
Questi contenuti sono destinati esclusivamente all'uso difensivo. Sono pensati per i team dei Security Operations Centre (SOC), gli ingegneri di detection e i threat hunter. Non è incluso alcun codice di exploit weaponizzato.
| Campo | Dettaglio |
|---|---|
| CVE | CVE-2025-25257 |
| EDB-ID | 52473 |
| Prodotto | Fortinet FortiWeb |
| Versioni interessate | 7.0.x fino a 7.6.x |
| Tipo di vulnerabilità | SQL Injection pre-autenticazione che porta a RCE |
| Vettore d'attacco | Endpoint API HTTP (non autenticato) |
| Autenticazione richiesta | Nessuna |
| Punteggio CVSS | 9.8 (Critico) |
| Patch disponibile | Sì, aggiornare alla 7.6.1 o successiva |
| Pubblicato | 2026-02-04 |
| Ricercatore | Milad Karimi (Ex3ptionaL) |
CVE-2025-25257 interessa l'endpoint API Fabric Connector /api/fabric/device/status in FortiWeb. L'header Authorization viene passato direttamente in una query SQL senza sanificazione. Un attaccante non autenticato può iniettare sintassi SQL nel valore del token Bearer per manipolare la query sottostante, bypassare l'autenticazione e, in determinate configurazioni, ottenere Remote Code Execution tramite l'impilamento di comandi basati su SQL o primitive di scrittura file.
La vulnerabilità è sfruttabile tramite rete senza credenziali. È facilmente rilevabile nei log di accesso HTTP se è attiva la raccolta dei log.
L'attaccante invia una richiesta HTTP GET modificata all'API Fabric Connector. Il token Bearer nell'header Authorization contiene SQL iniettato. Esempio di pattern:
Authorization: Bearer aaa' OR '1'='1
Ciò fa sì che la query SQL backend venga valutata come vera, bypassando la validazione del token. Ulteriori sfruttamenti possono includere l'iniezione basata su UNION per leggere dati o query impilate per scrivere file o eseguire comandi del sistema operativo, a seconda della configurazione e dei privilegi del database.
Il seguente è documentato esclusivamente per scopi di validazione delle regole di rilevamento.
GET /api/fabric/device/status HTTP/1.1
Host: <fortiweb-ip>
Authorization: Bearer aaa' OR '1'='1
Le regole di rilevamento in questo repository sono calibrate per identificare questo e simili pattern di iniezione nei log HTTP e nel traffico di rete.
| ID | Categoria | Metodo di rilevamento | Sorgente | Livello di copertura |
|---|---|---|---|---|
| D-01 | Sfruttamento di richieste web | Pattern di SQLi nell'header Authorization | Log web/proxy, WAF | Alto |
| D-02 | Sfruttamento di richieste web | Richieste a /api/fabric/device/status senza token valido | Log web | Alto |
| D-03 | Anomalia di esecuzione processi | Processo shell generato dal processo del server web | EDR / Sysmon | Alto |
| D-04 | Anomalia di esecuzione processi | sh, bash, python come processi figli di nginx o httpd | EDR | Alto |
| D-05 | Creazione file sospetta | Web shell scritta nella web root di FortiWeb | EDR / Integrità file | Medio |
| D-06 | Creazione file sospetta | File .php, .jsp, .py inattesi nelle directory web | Monitoraggio file | Medio |
| D-07 | Meccanismo di persistenza | Modifica di cron job post-sfruttamento | EDR / Auditd | Medio |
| D-08 | Meccanismo di persistenza | Nuovo account amministratore creato via API dopo la SQLi | Log API/Auth | Alto |
| D-09 | Attività container | Processo anomalo nel namespace del container FortiWeb | Container Runtime | Medio |
| D-10 | Threat Hunting | Deviazione dalla baseline nel tasso di chiamate API Fabric Connector | SIEM / Analitica | Medio |
| D-11 | Threat Hunting | IP sorgente con pattern ripetuti 200/403 verso /api/fabric/ | Log web | Alto |
| D-12 | Manomissione configurazione | Modifiche ai file di configurazione di FortiWeb dopo la richiesta web | Integrità file / EDR | Alto |
| D-13 | Manomissione configurazione | Scritture inattese in /data/ o /etc/ sul dispositivo | Auditd / EDR | Medio |
Le regole YARA si trovano in rules/yara/.
cve_2025_25257_http.yar - Rileva i pattern di sfruttamento nei file di log HTTP e nel traffico catturatocve_2025_25257_webshell.yar - Rileva web shell potenzialmente rilasciate dopo lo sfruttamentocve_2025_25257_payload.yar - Rileva artefatti di payload grezzi su discoScansione dei log di accesso HTTP:
yara -r rules/yara/cve_2025_25257_http.yar /var/log/fortiweb/
Scansione della web root per file rilasciati:
yara -r rules/yara/cve_2025_25257_webshell.yar /var/www/html/
Scansione di una cattura PCAP:
yara rules/yara/cve_2025_25257_http.yar capture.pcap
Esecuzione di tutte le regole ricorsivamente su una directory:
yara -r rules/yara/ /path/to/scan/
Le query KQL si trovano in rules/kql/. Ogni file è mirato a una specifica categoria di rilevamento.
| File | Descrizione |
|---|---|
01_web_exploitation.kql | Pattern di SQL injection nell'header Authorization |
02_process_spawn.kql | Processi figli anomali dal server web |
03_command_execution.kql | Catene di esecuzione di comandi sospette |
04_file_creation.kql | Scritture di file inattese nelle directory web |
05_persistence.kql | Indicatori di meccanismi di persistenza |
06_config_modification.kql | Manomissione dei file di configurazione |
07_threat_hunting.kql | Query avanzata di threat hunting |
Le regole Sigma sono in rules/sigma/. Possono essere convertite in qualsiasi formato SIEM usando sigma-cli o pySigma.
Conversione in Splunk SPL:
sigma convert -t splunk rules/sigma/cve_2025_25257_sqli.yml
Conversione in Elastic EQL:
sigma convert -t elasticsearch rules/sigma/cve_2025_25257_sqli.yml
Sulla CLI dell'appliance FortiWeb:
get system status | grep Version
Interessate: 7.0.x fino a 7.6.0
Corretta: 7.6.1 e successive
Un proxy inverso Nginx di base che simula l'endpoint vulnerabile può essere utilizzato per i test di rilevamento. Non è necessaria alcuna immagine FortiWeb reale per la validazione del rilevamento basato sui log.
# Pull the test lab container
docker run -d \
--name fortiweb-sim \
-p 8443:443 \
-v $(pwd)/src/lab/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx:alpine
# Send a simulated exploitation request
curl -k -H "Authorization: Bearer aaa' OR '1'='1" \
https://localhost:8443/api/fabric/device/status
Questo genererà una voce di log di accesso corrispondente ai pattern di rilevamento in D-01.
Dopo aver inviato la richiesta di test, controllare l'output simulato del log:
docker logs fortiweb-sim | grep "fabric/device/status"
Pattern di voce di log previsto:
"GET /api/fabric/device/status HTTP/1.1" 401 - "Bearer aaa' OR '1'='1"
Eseguire la regola YARA sul log:
yara rules/yara/cve_2025_25257_http.yar /var/log/nginx/access.log
Output previsto:
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
Questo repository è fornito esclusivamente per scopi difensivi ed educativi. Tutti i contenuti di detection sono pensati per aiutare i team di sicurezza a identificare e rispondere ai tentativi di sfruttamento. Non utilizzare alcun contenuto di questo repository contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione scritta a testare.
Questo progetto è concesso in licenza con la MIT License. Vedere LICENSE per i dettagli.