Uma ferramenta acessível, modular e robusta desenvolvida em Python e Playwright para simulação de ataques em APIs. O projeto foi pensado para desenvolvedores iniciantes e entusiastas de segurança (AppSec) que desejam testar a resiliência de suas aplicações contra as principais vulnerabilidades catalogadas no OWASP API Security Top 10.
- Mapeamento Automático de Rotas: Analisa documentações OpenAPI/Swagger (JSON ou YAML), resolve referências
$refrecursivamente e identifica parâmetros de rota, query e corpos de requisição (payloads). - Motor HTTP com Playwright: Utiliza a API
APIRequestContextdo Playwright para disparar requisições assíncronas, simulando requisições reais de forma rápida e controlada. - Módulos de Varredura:
- Falta de Rate Limiting: Envia rajadas de requisições simultâneas para verificar se a API bloqueia abusos retornando HTTP
429 Too Many Requests. - IDOR (Referência Direta Insegura a Objetos): Altera identificadores em rotas e parâmetros para checar se dados confidenciais são expostos sem autorização.
- Logic & Input Breaking (Fuzzing de Entrada): Injeta payloads de teste (aspas, SQLi, injeção de comandos) para verificar a ocorrência de erros internos não tratados (HTTP 500) ou vazamentos de pilha (stack traces).
- Mutador Dinâmico de JSON: Analisa a estrutura esperada no corpo da requisição e aplica variações de teste campo a campo.
- Falta de Rate Limiting: Envia rajadas de requisições simultâneas para verificar se a API bloqueia abusos retornando HTTP
- Relatórios Detalhados: Gera saídas em formato JSON estruturado e relatórios visuais em HTML com sugestões claras de correção.
api_fuzzer/
├── core/
│ ├── parser.py # Leitor e analisador da especificação OpenAPI
│ ├── client.py # Cliente HTTP baseado em Playwright
│ ├── runner.py # Orquestrador assíncrono dos testes
│ └── reporter.py # Gerador de relatórios JSON e HTML
├── modules/
│ ├── base.py # Classe base para criação de novos módulos
│ ├── rate_limit.py # Módulo de teste de limite de taxa
│ ├── idor.py # Módulo de verificação de IDOR
│ └── logic_breaking.py # Módulo de fuzzing e quebra de lógica
└── utils/
├── mutator.py # Gerador de mutações em payloads JSON
├── payloads.py # Coleção de dicionários e vetores de teste
└── sanitizer.py # Utilitário para validação e higienização de entradas
- Python 3.8 ou superior
- Pip (gerenciador de pacotes do Python)
-
Clone o repositório e instale as dependências necessárias:
pip install -r requirements.txt
-
Instale os navegadores do Playwright (necessário para os testes HTTP e automação):
playwright install chromium
Para rodar uma varredura direta indicando o arquivo OpenAPI e o endereço da API alvo:
python api_fuzzer/main.py --spec mock_openapi.json --target http://localhost:8000Se a sua API exigir um token de autorização manual, você pode enviá-lo pelo cabeçalho:
python api_fuzzer/main.py --spec mock_openapi.json --target http://localhost:8000 --header "Authorization: Bearer SEU_TOKEN_AQUI"O projeto também conta com uma interface gráfica simples para acompanhar a execução em tempo real e visualizar os relatórios sem precisar do terminal.
-
Inicie o servidor do painel web:
python web_app.py
-
Abra o seu navegador e acesse:
http://localhost:8080
Pensando em boas práticas de cibersegurança e proteção de dados, o Dashboard Web possui as seguintes proteções integradas:
- Autenticação JWT em Cookies Seguros: Uso de cookies com as flags
HttpOnly,SecureeSameSite=Strict, impedindo a leitura por scripts maliciosos (XSS). - Autenticação via API Key: Suporte a integração com esteiras de CI/CD ou automações através do cabeçalho
X-API-Key. - Bloqueio de Emergência (Kill Switch): Suporte à variável de ambiente
SISTEMA_BLOQUEADOpara interrupção imediata de acessos à aplicação em situações de risco. - Proteção contra Exposição de Código (Source Maps): Bloqueio automático de requisições buscando arquivos de mapas de código (
.map,.ts,.tsx,.jsx,.vue,.svelte). - Cabeçalhos de Segurança HTTP: Implementação de
Content-Security-Policy(CSP),X-Content-Type-Options: nosniff,X-Frame-Options: DENYeReferrer-Policy. - Higiene de Armazenamento Local: NENHUM token ou dado pessoal é mantido em
localStorageousessionStorage. - Gestão de Segredos: Todas as credenciais de produção e chaves de criptografia são lidas exclusivamente por variáveis de ambiente (
os.environ).
Contribuições são super bem-vindas! Se você encontrou algum problema ou tem sugestões de novos módulos de teste, fique à vontade para abrir uma issue ou enviar um pull request.
Este projeto é disponibilizado sob a licença MIT. Sinta-se livre para usar, estudar e modificar o código.