
A scanner for the FortiNet vulnerability CVE-2025-64446
Einfacher Python-Helfer, um Fortinet/FortiWeb-Ziele auf das fwbcgi Authentifizierungsumgehungsmuster zu testen, das von watchTowr Labs gemeldet wurde. Informationen und Anfragedetails stammen von: 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
Ziele müssen ihr Schema explizit angeben (http:// oder https://). Falls der Port weggelassen wird, nimmt der Scanner 80 für HTTP oder 443 für HTTPS an. Pro Ziel wird eine Zeile mit [+] VULNERABLE, [+] MAY BE VULNERABLE, [+] PATCHED, [+] POSSIBLY PATCHED oder [-] INDETERMINATE ausgegeben; optional werden Wörter hervorgehoben, die „forti“ enthalten.
targets: ein oder mehrere <scheme>://<host>[:<port>]-Einträge in der Befehlszeile (Ports standardmäßig 80 für HTTP oder 443 für HTTPS).-f/--targets-file: zusätzliche Ziele aus Datei(en) einlesen; gleiches <scheme>://<host>[:<port>]-Format.--timeout: Socket-Timeout in Sekunden (Standard 5).--find-forti: einzigartige Token ausgeben, die „forti“ enthalten und im Antworttext erschienen sind.--follow-redirects: optionale Weiterleitungsverarbeitung für Ziele, die 30x-Antworten ausgeben.--max-redirects: Begrenzung für Weiterleitungssprünge, wenn --follow-redirects aktiv ist (Standard 3; deaktiviert das Folgen, selbst wenn das Flag gesetzt ist).Aufgrund fehlender geeigneter Testinfrastruktur ist hier die von mir verwendete naive Testsuite:
PYTHONPYCACHEPREFIX=./.pycache python3 -m unittest discover -s tests
Der Scanner setzt TLS 1.2+ voraus, um mit modernen Fortinet- oder Cloudflare-geschützten Seiten zu kommunizieren. Stellen Sie sicher, dass das von Ihnen verwendete python3 mit einer aktuellen OpenSSL-Build verknüpft ist:
/usr/bin/python3) ist an LibreSSL 2.8 gebunden und kann TLS 1.3 nicht aushandeln, was zu TLSV1_ALERT_PROTOCOL_VERSION-Fehlern führt. Installieren Sie einen modernen Interpreter über Homebrew (brew install python) oder pyenv und führen Sie den Scanner mit diesem Binary aus (z. B. /opt/homebrew/bin/python3).python3 - <<'PY'\nimport ssl; print(ssl.OPENSSL_VERSION)\nPY. Wenn eine ältere Version gemeldet wird, installieren Sie ein aktualisiertes Python (pyenv, Distro-Backports usw.).ssl.OPENSSL_VERSION-Snippet, wenn Sie in WSL oder einer älteren virtuellen Umgebung arbeiten.Falls Sie auf einem älteren Interpreter laufen müssen, müssen Sie damit rechnen, dass HTTPS-Ziele, die TLS 1.3 erfordern, fehlschlagen; HTTP-Ziele funktionieren unabhängig davon.
0--validate-tls: Zertifikatsvalidierung für HTTPS-Ziele und Weiterleitungen erzwingen (Standardverhalten überspringt die Validierung, um Blockaden durch selbstsignierte Zertifikate zu vermeiden).--workers: Anzahl gleichzeitiger Scans über asyncio (Standard 10).--user-agent: eigener HTTP User-Agent-Header (Standard fwbcgi-scanner/1.0).--csv-output: <target>,<classification>-Zeilen in die angegebene CSV-Datei schreiben, zusätzlich zur Konsolenausgabe.