
Runtime-aware SCA — prova quais CVEs são realmente alcançáveis, não apenas instaladas.
SCA com reconhecimento de runtime — comprova quais CVEs são realmente alcançáveis, não apenas instaladas.
O 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. Consulte ROADMAP.md para detalhes.
O VulnReach parte da saída padrão do SCA e adiciona contexto de alcançabilidade — comprovando, por meio de análise estática, rastreamento de taint e cobertura de runtime ao vivo, quais das CVEs detectadas podem realmente ser alcançadas na 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ções de remediação voltadas ao analista (ações imediatas, sondagens de validação, caminhos de upgrade, monitoramento) para um achado determinístico. Preguiçoso / sob demanda: as varreduras nunca chamam o LLM, e falhas do LLM degradam graciosamente. O veredito determinístico é somente leitura. Consulte docs/api.md.scan.runtime.ebpf (focado em Linux, opt-in explícito)Consulte:
Cada CVE é classificada por meio de uma cadeia de evidências de cinco camadas:
1. SCA (Trivy) → is the package installed and vulnerable?
2. Taint analysis (tainter) → does user input flow to the vulnerable sink?
3. AST analysis → is the vulnerable function in your call graph?
4. Route exposure → is the call path reachable from an HTTP endpoint?
5. Runtime coverage → was the vulnerable code actually executed?
O resultado é uma lista priorizada de achados com quatro níveis:
| Nível | Significado |
|---|---|
DYNAMICALLY_REACHABLE | A cobertura de runtime confirmou a execução — corrija imediatamente |
STATICALLY_REACHABLE | Caminho de código comprovado via AST/taint — alta prioridade |
UNCERTAIN | Apenas sinal fraco — investigue |
NOT_REACHABLE | Sem evidências — suprima da fila de alertas |
Aviso de segurança — antes de iniciar, copie
.env.examplepara.env.locale substitua cada valorCHANGE_MEpor um segredo forte e aleatório.
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 /loginSettings -> API Keys, 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 achados críticos confirmados; dispare e aplique o portão via curl — consulte docs/ci-cd-gating.mdAuthorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none por padrão; Ollama suportado para uso offline