Skip to content

Repository files navigation

Web Vulnerability Scanner

CI Python OWASP WSTG Coverage Release License

Web Vulnerability Scanner

Scanner DAST educacional em Python com crawler determinístico, controle de escopo, verificações passivas, sondagens ativas não destrutivas e relatórios JSON, HTML e SARIF.

O projeto demonstra arquitetura e validação de detectores. Scanners black-box não substituem revisão manual, modelagem de ameaças ou ferramentas DAST maduras.

Estado: v1.0.0 com funcionalidades congeladas. O foco atual é estabilidade, documentação e correções.

Resultado verificado

  • nove testes aprovados e 92% de cobertura total;
  • Ruff, Mypy estrito e validação de dependências aprovados;
  • scans passivo e ativo exportados em JSON, HTML e SARIF 2.1.0;
  • precisão e recall de 100% nas cinco regras avaliadas no fixture sintético;
  • escape de escopo bloqueado e zero ocorrências do segredo sentinela nos relatórios.

Destaques

  • mesma origem por padrão e revalidação de cada redirecionamento;
  • pinagem observacional de endereços DNS durante o scan;
  • limites de páginas, profundidade, requisições, corpo, duração e taxa;
  • execução passiva por padrão;
  • detectores ativos com canary, contexto e baseline repetida;
  • severidade separada de confiança;
  • redação de cookies, autorização e parâmetros sensíveis;
  • JSON versionado, HTML autocontido e SARIF 2.1.0;
  • laboratório com pares vulnerável/corrigido e gabarito.

Instalação

PowerShell

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"

Linux/macOS

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"

Demonstração local

Terminal 1:

python lab/app.py --port 8000

Terminal 2, scan passivo:

python -m web_vuln_scanner scan http://127.0.0.1:8000 \
  --config scanner.example.yml \
  --json reports/passive.json \
  --html reports/passive.html \
  --sarif reports/passive.sarif

Scan com sondagens do laboratório:

python -m web_vuln_scanner scan http://127.0.0.1:8000 \
  --config scanner.example.yml --active \
  --json reports/active.json \
  --html reports/active.html \
  --sarif reports/active.sarif

O modo ativo implementa candidatos a XSS refletido, SQL injection e redirecionamento aberto. Ele não classifica qualquer reflexão ou mudança de página como vulnerabilidade.

Regras

ID Tipo Finalidade
HDR-001 Passiva HSTS ausente em HTTPS
HDR-002 Passiva CSP/proteção de framing ausente
HDR-003 Passiva nosniff ausente
SES-001 Passiva atributos de cookie incompletos
INF-001 Passiva divulgação de tecnologia
TLS-001 Passiva conteúdo misto/formulário inseguro
INJ-001 Ativa candidato contextual a XSS refletido
INJ-002 Ativa candidato diferencial a SQL injection
RED-001 Ativa redirecionamento aberto confirmado por Location

Códigos de retorno

  • 0: scan concluído sem atingir o limiar;
  • 2: erro de configuração ou execução;
  • 10: achado no limiar configurado por --fail-on.

Qualidade

python -m ruff check src tests lab
python -m mypy src
python -m coverage run -m pytest -q
python -m coverage report --fail-under=90

Arquitetura

YAML -> ScopePolicy/SafetyBudget -> AsyncFetcher -> Crawler
                                                 |       |
                                                 v       v
                                              passivo  ativo
                                                 \       /
                                                  Findings
                                                     |
                                             JSON/HTML/SARIF

Detalhes: docs/architecture.md, docs/threat-model.md e docs/rule-authoring.md.

Limitações

  • não executa JavaScript e não cobre completamente SPAs;
  • não automatiza fluxos autenticados de várias etapas;
  • não testa stored XSS, upload, RCE, desserialização ou brute force;
  • pinagem DNS observacional reduz mudanças detectáveis, mas não substitui resolução/conexão totalmente acopladas no sistema operacional;
  • métricas publicadas valem apenas para o laboratório sintético.

Referências

Consulte REFERENCIAS.md. Identificadores WSTG e CWE são incluídos nos achados para rastreabilidade.

Status da versão

A versão 1.0.0 está congelada. Consulte CHANGELOG.md, SECURITY.md e docs/verification.md.

Licença

MIT.

About

Scope-controlled educational DAST scanner with passive and active rules plus JSON, HTML and SARIF reports

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages