
A scanner for the FortiNet vulnerability CVE-2025-64446
Simples utilitário Python para sondar alvos Fortinet/FortiWeb em busca do padrão de bypass de autenticação fwbcgi relatado pela watchTowr Labs. As informações e detalhes da requisição vieram 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
Os alvos devem incluir seu esquema explicitamente (http:// ou https://). Se a porta for omitida, o scanner assume 80 para HTTP ou 443 para HTTPS. Produz uma linha por alvo com [+] VULNERABLE, [+] MAY BE VULNERABLE, [+] PATCHED, [+] POSSIBLY PATCHED, ou [-] INDETERMINATE; opcionalmente destaca palavras contendo “forti”.
targets: uma ou mais entradas <scheme>://<host>[:<port>] na linha de comando (portas padrão 80 para HTTP ou 443 para HTTPS).-f/--targets-file: lê alvos adicionais de arquivo(s); mesmo formato <scheme>://<host>[:<port>].--timeout: timeout de socket em segundos (padrão 5).--find-forti: imprime tokens únicos contendo “forti” que apareceram no corpo da resposta.--follow-redirects: tratamento opcional de redirecionamentos para alvos que emitem respostas 30x.--max-redirects: limite para saltos de redirecionamento quando --follow-redirects está ativo (padrão 3, desabilita o seguimento mesmo se a flag estiver presente).Devido à falta de uma infraestrutura de teste decente, aqui está a suíte de testes ingênua que usei.
PYTHONPYCACHEPREFIX=./.pycache python3 -m unittest discover -s tests
O scanner depende de suporte TLS 1.2+ para se comunicar com sites modernos da Fortinet ou protegidos pelo Cloudflare. Certifique-se de que o python3 que você executa está vinculado a uma versão recente do OpenSSL:
/usr/bin/python3) está vinculado ao LibreSSL 2.8 e não consegue negociar TLS 1.3, causando erros TLSV1_ALERT_PROTOCOL_VERSION. Instale um interpretador moderno via Homebrew (brew install python) ou pyenv e execute o scanner com esse binário (ex.: /opt/homebrew/bin/python3).python3 - <<'PY'\nimport ssl; print(ssl.OPENSSL_VERSION)\nPY. Se relatar algo mais antigo, instale um python atualizado (pyenv, backports da distribuição, etc.).ssl.OPENSSL_VERSION se estiver executando dentro do WSL ou de um ambiente virtual mais antigo.Se você precisar executar em um interpretador mais antigo, espere que alvos HTTPS que exigem TLS 1.3 falhem; alvos HTTP continuam funcionando independentemente.
0--validate-tls: força validação de certificado para alvos HTTPS e redirecionamentos (comportamento padrão pula validação para evitar bloqueio em certificados autoassinados).--workers: número de varreduras concorrentes a executar via asyncio (padrão 10).--user-agent: cabeçalho HTTP User-Agent personalizado (padrão fwbcgi-scanner/1.0).--csv-output: escreve linhas <target>,<classification> no arquivo CSV fornecido além da saída no console.