
Un scanneur pour la vulnérabilité FortiNet CVE-2025-64446
Assistant Python simple pour sonder des cibles Fortinet/FortiWeb pour le motif de contournement d'authentification fwbcgi rapporté par watchTowr Labs. Les informations et les détails des requêtes proviennent de : 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
Les cibles doivent inclure explicitement leur schéma (http:// ou https://). Si le port est omis, le scanner suppose 80 pour HTTP ou 443 pour HTTPS. Il produit une ligne par cible avec [+] VULNERABLE, [+] MAY BE VULNERABLE, [+] PATCHED, [+] POSSIBLY PATCHED, ou [-] INDETERMINATE ; il surligne en option les mots contenant « forti ».
targets : une ou plusieurs entrées <scheme>://<host>[:<port>] en ligne de commande (les ports sont 80 par défaut pour HTTP ou 443 pour HTTPS).-f/--targets-file : lit des cibles supplémentaires depuis un ou plusieurs fichiers ; même format <scheme>://<host>[:<port>].--timeout : délai d'expiration de socket en secondes (défaut 5).--find-forti : affiche les jetons uniques contenant « forti » apparus dans le corps de la réponse.--follow-redirects : gestion des redirections en option pour les cibles qui renvoient des réponses 30x.--max-redirects : limite du nombre de sauts de redirection lorsque --follow-redirects est actif (défaut 3, désactive le suivi même si l'option est présente).En raison d'un manque d'infrastructure de test convenable, voici la suite de tests naïve que j'ai utilisée.
PYTHONPYCACHEPREFIX=./.pycache python3 -m unittest discover -s tests
Le scanner repose sur la prise en charge de TLS 1.2+ pour communiquer avec les sites Fortinet ou Cloudflare modernes. Assurez-vous que le python3 que vous exécutez est lié à une version récente d'OpenSSL :
/usr/bin/python3) est lié à LibreSSL 2.8 et ne peut pas négocier TLS 1.3, ce qui provoque des erreurs TLSV1_ALERT_PROTOCOL_VERSION. Installez un interpréteur moderne via Homebrew (brew install python) ou pyenv et exécutez le scanner avec ce binaire (par exemple, /opt/homebrew/bin/python3).python3 - <<'PY'\nimport ssl; print(ssl.OPENSSL_VERSION)\nPY. S'il indique une version plus ancienne, installez un Python à jour (pyenv, rétroports de la distribution, etc.).ssl.OPENSSL_VERSION si vous utilisez WSL ou un environnement virtuel plus ancien.Si vous devez exécuter le scanner sur un interpréteur plus ancien, attendez-vous à ce que les cibles HTTPS nécessitant TLS 1.3 échouent ; les cibles HTTP continuent de fonctionner quoi qu'il en soit.
0--validate-tls : force la validation des certificats pour les cibles HTTPS et les redirections (le comportement par défaut ignore la validation pour éviter de bloquer sur les certificats auto-signés).--workers : nombre de scans concurrents à exécuter via asyncio (défaut 10).--user-agent : en-tête HTTP User-Agent personnalisé (défaut fwbcgi-scanner/1.0).--csv-output : écrit des lignes <target>,<classification> dans le fichier CSV donné en plus de la sortie console.