
SCA consapevole del runtime — dimostra quali CVE sono effettivamente raggiungibili, non solo installati.
SCA consapevole del runtime — dimostra quali CVE sono effettivamente raggiungibili, non solo installate.
VulnReach è ora un Progetto OWASP ufficiale. 🎉




Supporto linguistico: Python è completamente pronto per la produzione (taint, AST, route, runtime). Java e JavaScript hanno analisi funzionale del call graph e sono sperimentali. Go, C# e PHP sono nella roadmap. Vedi ROADMAP.md per i dettagli.
VulnReach si basa sull'output SCA standard aggiungendo il contesto di raggiungibilità — dimostrando tramite analisi statica, taint tracking e copertura runtime live quali delle CVE rilevate possono essere effettivamente raggiunte nella tua applicazione.
POST /scan/{id}/cancel interrompe le scansioni in corsosummary + bucket classificati su GET /scan/{id}VULNREACH_ALLOW_DOCKER_DAEMON=truedocker-socket-proxy con restrizioniPOST /findings/{id}/next-steps produce indicazioni di remediation orientate all'analista (azioni immediate, probe di validazione, percorsi di aggiornamento, monitoraggio) per un riscontro deterministico. Lazy / on-demand: le scansioni non chiamano mai l'LLM e i fallimenti dell'LLM degradano con grazia. Il verdetto deterministico è in sola lettura. Vedi .scan.runtime.ebpf (focalizzata su Linux, opt-in esplicito)Vedi:
Ogni CVE viene classificata attraverso una catena di prove a cinque livelli:
1. SCA (Trivy) → il pacchetto è installato e vulnerabile?
2. Analisi taint (tainter) → l'input utente fluisce verso il sink vulnerabile?
3. Analisi AST → la funzione vulnerabile è nel tuo call graph?
4. Esposizione della route → il percorso di chiamata è raggiungibile da un endpoint HTTP?
5. Copertura runtime → il codice vulnerabile è stato effettivamente eseguito?
Il risultato è un elenco di riscontri prioritizzati con quattro livelli:
| Livello | Significato |
|---|---|
DYNAMICALLY_REACHABLE | La copertura runtime ha confermato l'esecuzione — correggi subito |
Nota di sicurezza — prima di iniziare, copia
.env.examplein.env.locale sostituisci ogni valoreCHANGE_MEcon un segreto casuale robusto.
Non esporre VulnReach su una rete pubblica senza impostare credenziali reali e configurareCORS_ORIGINS.
git clone https://github.com/ihrishikesh0896/vulnreach.git
cd vulnreach
# 1. Crea la tua configurazione locale
cp .env.example .env.local
# 2. Compila ogni CHANGE_ME — genera i segreti con: openssl rand -hex 32
$EDITOR .env.local
# 3. Avvia lo stack
docker compose up --build
# Opzionale: abilita le scansioni runtime dinamiche (accesso al daemon Docker tramite socket proxy limitato)
# docker compose -f docker-compose.yml -f docker-compose.runtime.yml up --build
Opzioni di autenticazione:
POST /loginSettings -> API Keys, poi usalo come Authorization: Bearer <API_KEY># Ottieni un token (sostituisci con le credenziali impostate in .env.local)
TOKEN=$(curl -s -X POST http://localhost:8000/login \
-H "Content-Type: application/json" \
-d '{"username":"<tuo-admin-user>","password":"<tua-admin-password>"}' | jq -r .access_token)
# Avvia la scansione da una repo GitHub
curl -X POST http://localhost:8000/scan \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"repo_url":"https://github.com/tuaorg/tuaapp"}'
# Interroga i risultati
curl http://localhost:8000/scan/<scan_id> \
-H "Authorization: Bearer $TOKEN" | jq .summary
coverage.pypolicy.block_if fa fallire le build su riscontri critici confermatiAuthorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none; Ollama supportato per l'uso offlineTarget di scansione: multi-tier-dvpa — un'applicazione Python/Django intenzionalmente vulnerabile con 72 CVE grezze su 11 pacchetti.
Il 46% dei riscontri è stato spostato fuori dalla coda indifferenziata "correggi tutto" in un elenco di azioni prioritizzate. In un tipico servizio di produzione (dove molte dipendenze transitive non vengono mai chiamate), questa cifra sale al 70–90%.
Metodologia completa, dettaglio della catena di prove e ripartizione a livello di pacchetto: docs/benchmark.md
scan.ymltrivy nel PATH (installazione)jq (usato negli esempi di avvio rapido — installazione)Opzionali (tutti vengono saltati con grazia se assenti):
semgrep — pip install semgreptainter — pip install tainter (analisi del flusso taint; vedi guida allo sviluppo)Apache 2.0 — vedi LICENSE.
STATICALLY_REACHABLE | Percorso del codice dimostrato tramite AST/taint — priorità alta |
UNCERTAIN | Solo segnale debole — investiga |
NOT_REACHABLE | Nessuna evidenza — sopprimi dalla coda di alert |
| Livello | Risultato |
|---|
| CVE grezze (Trivy) | 72 |
| Riscontri classificati (VulnReach) | 90 |
| DYNAMICALLY_REACHABLE — correggi ora | 49 |
| STATICALLY_REACHABLE — correggi in questo sprint | 23 |
| UNCERTAIN — investiga | 18 |
| NOT_REACHABLE — sopprimi | 0 |
| Gate pipeline CI | BLOCCATO |