
Laufzeitbewusste SCA — beweist, welche CVEs tatsächlich erreichbar sind, nicht nur installiert.
Laufzeitbewusste SCA — beweist, welche CVEs tatsächlich erreichbar sind, nicht nur installiert.
VulnReach ist jetzt ein offizielles OWASP-Projekt. 🎉




Sprachunterstützung: Python ist vollständig produktionsreif (Taint, AST, Route, Runtime). Java und JavaScript verfügen über funktionale Call-Graph-Analyse und sind experimentell. Go, C# und PHP stehen auf der Roadmap. Details siehe ROADMAP.md.
VulnReach baut auf der Standard-SCA-Ausgabe auf und ergänzt Erreichbarkeitskontext — es beweist durch statische Analyse, Taint-Tracking und Live-Runtime-Abdeckung, welche der erkannten CVEs in Ihrer Anwendung tatsächlich erreichbar sind.
POST /scan/{id}/cancel stoppt laufende Scanssummary + klassifizierte Buckets bei GET /scan/{id}VULNREACH_ALLOW_DOCKER_DAEMON=truedocker-socket-proxyPOST /findings/{id}/next-steps erzeugt analystenorientierte Remediation-Hinweise (sofortige Maßnahmen, Validierungsproben, Upgrade-Pfade, Monitoring) für einen deterministischen Finding. Lazy / On-Demand: Scans rufen niemals das LLM auf, und LLM-Fehler degradieren graceful. Das deterministische Urteil ist read-only. Siehe docs/api.md.scan.runtime.ebpf-Tracing-Modus (Linux-fokussiert, explizites Opt-in)Siehe:
Jede CVE wird durch eine fünfschichtige Evidenzkette klassifiziert:
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?
Das Ergebnis ist eine priorisierte Finding-Liste mit vier Stufen:
| Stufe | Bedeutung |
|---|---|
DYNAMICALLY_REACHABLE | Runtime-Abdeckung bestätigte Ausführung — sofort beheben |
STATICALLY_REACHABLE | Codepfad über AST/Taint bewiesen — hohe Priorität |
UNCERTAIN | Nur schwaches Signal — untersuchen |
NOT_REACHABLE | Keine Evidenz — aus der Alert-Queue unterdrücken |
Sicherheitshinweis — kopieren Sie vor dem Start
.env.examplenach.env.localund ersetzen Sie jedenCHANGE_ME-Wert durch ein starkes zufälliges Secret.
Stellen Sie VulnReach nicht in einem öffentlichen Netzwerk bereit, ohne echte Anmeldedaten zu setzen undCORS_ORIGINSzu konfigurieren.
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
Auth-Optionen:
POST /loginSettings -> API Keys erstellen, dann als Authorization: Bearer <API_KEY> verwenden# 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 lässt Builds bei bestätigten kritischen Findings fehlschlagen; Auslösen und Gaten via curl — siehe docs/ci-cd-gating.mdAuthorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none; Ollama für Offline-Nutzung unterstütztScan-Ziel: multi-tier-dvpa — eine absichtlich verwundbare Python/Django-Anwendung mit 72 rohen CVEs über 11 Pakete.