
SCA consciente del runtime — demuestra qué CVEs son realmente alcanzables, no solo instalados.
SCA consciente del entorno de ejecución — demuestra qué CVE son realmente alcanzables, no solo cuáles están instalados.
VulnReach ahora es un Proyecto OWASP oficial. 🎉




Soporte de lenguajes: Python está completamente listo para producción (taint, AST, rutas, runtime). Java y JavaScript cuentan con análisis funcional de grafo de llamadas y son experimentales. Go, C# y PHP están en la hoja de ruta. Consulte ROADMAP.md para más detalles.
VulnReach se construye sobre la salida estándar del SCA añadiendo contexto de alcanzabilidad — demostrando mediante análisis estático, seguimiento de taint y cobertura en tiempo de ejecución cuáles de los CVE detectados pueden realmente alcanzarse en su aplicación.
POST /scan/{id}/cancel detiene los escaneos en cursosummary + buckets clasificados en GET /scan/{id}VULNREACH_ALLOW_DOCKER_DAEMON=truedocker-socket-proxy restringidoPOST /findings/{id}/next-steps genera orientación de remediación para el analista (acciones inmediatas, sondas de validación, rutas de actualización, monitorización) para un hallazgo determinista. Perezoso / bajo demanda: los escaneos nunca llaman al LLM, y los fallos del LLM se degradan de forma controlada. El veredicto determinista es de solo lectura. Consulte docs/api.md.scan.runtime.ebpf (enfocado en Linux, opt-in explícito)Consulte:
Cada CVE se clasifica mediante una cadena de evidencia de cinco capas:
1. SCA (Trivy) → ¿está el paquete instalado y es vulnerable?
2. Análisis de taint (tainter) → ¿fluye la entrada del usuario hacia el sink vulnerable?
3. Análisis AST → ¿está la función vulnerable en su grafo de llamadas?
4. Exposición de rutas → ¿es alcanzable la ruta de llamada desde un endpoint HTTP?
5. Cobertura en runtime → ¿se ejecutó realmente el código vulnerable?
El resultado es una lista de hallazgos priorizada con cuatro niveles:
| Nivel | Significado |
|---|---|
DYNAMICALLY_REACHABLE | La cobertura en runtime confirmó la ejecución — corregir de inmediato |
STATICALLY_REACHABLE | Ruta de código demostrada mediante AST/taint — alta prioridad |
UNCERTAIN | Solo señal débil — investigar |
NOT_REACHABLE | Sin evidencia — suprimir de la cola de alertas |
Aviso de seguridad — antes de empezar, copie
.env.examplea.env.localy reemplace cada valorCHANGE_MEpor un secreto aleatorio fuerte.
No exponga VulnReach en una red pública sin configurar credenciales reales y 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
Opciones de autenticación:
POST /loginSettings -> API Keys, luego úselo 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