
Runtime-aware SCA — prova quais CVEs são realmente alcançáveis, não apenas instaladas.
SCA consciente de tempo de execução — prova quais CVEs são realmente alcançáveis, não apenas instaladas.
VulnReach agora é um Projeto OWASP oficial. 🎉




Suporte a linguagens: Python está totalmente pronto para produção (taint, AST, rota, runtime). Java e JavaScript possuem análise funcional de grafo de chamadas e são experimentais. Go, C# e PHP estão no roadmap. Veja ROADMAP.md para detalhes.
VulnReach se baseia na saída padrão do SCA adicionando contexto de alcançabilidade — provando através de análise estática, rastreamento de taint e cobertura de runtime ao vivo quais das CVEs detectadas podem realmente ser alcançadas em sua aplicação.
POST /scan/{id}/cancel interrompe varreduras em andamentosummary + buckets classificados em GET /scan/{id}VULNREACH_ALLOW_DOCKER_DAEMON=truedocker-socket-proxy restritoPOST /findings/{id}/next-steps produz orientação de remediação voltada para analistas (ações imediatas, sondas de validação, caminhos de atualização, monitoramento) para uma descoberta determinística. Preguiçoso / sob demanda: as varreduras nunca chamam o LLM, e falhas do LLM degradam graciosamente. O veredito determinístico é somente leitura. Veja docs/api.md.scan.runtime.ebpf (focado em Linux, aceitação explícita)Veja:
Cada CVE é classificada através de uma cadeia de evidências de cinco camadas:
1. SCA (Trivy) → o pacote está instalado e vulnerável?
2. Análise de taint (tainter) → a entrada do usuário flui para o sink vulnerável?
3. Análise AST → a função vulnerável está no seu grafo de chamadas?
4. Exposição de rota → o caminho de chamada é alcançável a partir de um endpoint HTTP?
5. Cobertura de runtime → o código vulnerável foi realmente executado?
O resultado é uma lista de descobertas priorizadas com quatro níveis:
| Nível | Significado |
|---|---|
DYNAMICALLY_REACHABLE | Cobertura de runtime confirmou execução — corrija imediatamente |
STATICALLY_REACHABLE | Caminho de código comprovado via AST/taint — alta prioridade |
UNCERTAIN | Apenas sinal fraco — investigue |
NOT_REACHABLE | Nenhuma evidência — suprima da fila de alertas |
Aviso de segurança — antes de iniciar, copie
.env.examplepara.env.locale substitua cada valorCHANGE_MEpor um segredo aleatório forte.
Não exponha o VulnReach em uma rede pública sem definir credenciais reais e configurarCORS_ORIGINS.
git clone https://github.com/ihrishikesh0896/vulnreach.git
cd vulnreach
# 1. Create your local config
cp .env.example .env.local
# 2. Fill in every CHANGE_ME — generate secrets with: openssl rand -hex 32
$EDITOR .env.local
# 3. Start the stack
docker compose up --build
# Optional: enable dynamic runtime scans (Docker daemon access via restricted socket proxy)
# docker compose -f docker-compose.yml -f docker-compose.runtime.yml up --build
Opções de autenticação:
POST /loginConfigurações -> Chaves da API, depois use como Authorization: Bearer <API_KEY># Get a token (replace with the credentials you set in .env.local)
TOKEN=$(curl -s -X POST http://localhost:8000/login \
-H "Content-Type: application/json" \
-d '{"username":"<your-admin-user>","password":"<your-admin-password>"}' | jq -r .access_token)
# Start scan from a GitHub repo
curl -X POST http://localhost:8000/scan \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"repo_url":"https://github.com/yourorg/yourapp"}'
# Poll for results
curl http://localhost:8000/scan/<scan_id> \
-H "Authorization: Bearer $TOKEN" | jq .summary
coverage.pypolicy.block_if falha builds em descobertas críticas confirmadasAuthorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none; Ollama suportado para uso offline