
Uno scanner per la vulnerabilità FortiNet CVE-2025-64446
Semplice helper Python per sondare i target Fortinet/FortiWeb alla ricerca del pattern di bypass dell'autenticazione fwbcgi segnalato da watchTowr Labs. Le informazioni e i dettagli delle richieste provengono da: https://labs.watchtowr.com/when-the-impersonation-function-gets-used-to-impersonate-users-fortinet-fortiweb-auth-bypass/
python3 scanner.py http://192.168.9.1:80
python3 scanner.py -f targets.txt --find-forti --follow-redirects
I target devono includere esplicitamente lo schema (http:// o https://). Se la porta viene omessa, lo scanner assume 80 per HTTP o 443 per HTTPS. Emette una riga per target con [+] VULNERABLE, [+] MAY BE VULNERABLE, [+] PATCHED, [+] POSSIBLY PATCHED o [-] INDETERMINATE; opzionalmente evidenzia le parole che contengono “forti”.
targets: una o più voci <scheme>://<host>[:<port>] sulla riga di comando (le porte predefinite sono 80 per HTTP o 443 per HTTPS).-f/--targets-file: legge target aggiuntivi da file; stesso formato <scheme>://<host>[:<port>].--timeout: timeout di socket in secondi (predefinito 5).--find-forti: stampa i token univoci contenenti “forti” comparsi nel corpo della risposta.--follow-redirects: gestione dei redirect opzionale per i target che restituiscono risposte 30x.--max-redirects: limite per i salti di redirect quando --follow-redirects è attivo (predefinito 3, disabilita il follow anche se il flag è presente).A causa della mancanza di un'infrastruttura di test adeguata, ecco la semplice suite di test che ho utilizzato.
PYTHONPYCACHEPREFIX=./.pycache python3 -m unittest discover -s tests
Lo scanner fa affidamento sul supporto a TLS 1.2+ per comunicare con i siti Fortinet moderni o protetti da Cloudflare. Assicurati che il python3 che esegui sia collegato a una build recente di OpenSSL:
/usr/bin/python3) è legato a LibreSSL 2.8 e non può negoziare TLS 1.3, causando errori TLSV1_ALERT_PROTOCOL_VERSION. Installa un interprete moderno tramite Homebrew (brew install python) o pyenv ed esegui lo scanner con quel binario (ad es. /opt/homebrew/bin/python3).python3 - <<'PY'\nimport ssl; print(ssl.OPENSSL_VERSION)\nPY. Se riporta una versione precedente, installa un Python aggiornato (pyenv, backport della distro, ecc.).ssl.OPENSSL_VERSION se stai eseguendo dentro WSL o un ambiente virtuale meno recente.Se devi eseguire su un interprete più vecchio, aspettati che i target HTTPS che richiedono TLS 1.3 falliscano; i target HTTP continuano a funzionare comunque.
0--validate-tls: forza la validazione dei certificati per i target HTTPS e i redirect (il comportamento predefinito salta la validazione per evitare blocchi su certificati autofirmati).--workers: numero di scansioni concorrenti da eseguire tramite asyncio (predefinito 10).--user-agent: header HTTP User-Agent personalizzato (predefinito fwbcgi-scanner/1.0).--csv-output: scrive righe <target>,<classification> nel file CSV indicato, oltre all'output sulla console.