
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 docs/api.md.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 |
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 |
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 offline