
Progetto di esempio che usa VEX per sopprimere CVE-2024-29415.
Questo progetto di esempio dipende dal pacchetto npm node-ip che è vulnerabile a CVE-2024-29415.
Tuttavia, poiché il nostro progetto non utilizza direttamente la funzione vulnerabile .isPublic(), non è sfruttabile per CVE-2024-29415.
Posso impacchettare il mio progetto come un'immagine Docker:
docker buildx build -t felipecruz1638514/node-ip-vex:v1 .
Ed eseguire un'analisi Docker Scout per verificare se il mio progetto è vulnerabile a CVE-2024-29415:
docker scout cves felipecruz1638514/node-ip-vex:v1 --only-cve-id CVE-2024-29415
✓ Immagine archiviata per l'indicizzazione
✓ Indicizzati 221 pacchetti
✓ Provenienza ottenuta dall'attestazione
✗ Rilevato 1 pacchetto vulnerabile con 1 vulnerabilità
## Panoramica
│ Immagine Analizzata
────────────────────┼─────────────────────────────────────
Bersaglio │ felipecruz1638514/node-ip-vex:v1
digest │ 972354a74233
piattaforma │ linux/arm64
vulnerabilità │ 0C 1H 0M 0L
dimensione │ 48 MB
pacchetti │ 221
## Pacchetti e Vulnerabilità
0C 1H 0M 0L ip 2.0.1
pkg:npm/[email protected]
✗ ALTA CVE-2024-29415 [Server-Side Request Forgery (SSRF)]
https://scout.docker.com/v/CVE-2024-29415
Intervallo affetto : <=2.0.1
Versione corretta : non corretta
1 vulnerabilità trovata in 1 pacchetto
BASSA 0
MEDIA 0
ALTA 1
CRITICA 0
L'output di questo comando mostra che questa CVE affligge il pacchetto npm [email protected] nell'immagine.
Il passo successivo è generare un documento VEX per aggiungere contesto sul fatto che, solo perché contiene un pacchetto vulnerabile - [email protected] - non significa che la vulnerabilità sia sfruttabile per CVE-2024-29415.
Possiamo usare vexctl per creare un documento VEX:
vexctl create \
--author="[email protected]" \
--product="pkg:docker/felipecruz1638514/node-ip-vex@v2" \
--subcomponents="pkg:npm/[email protected]" \
--vuln="CVE-2024-29415" \
--status="not_affected" \
--justification="vulnerable_code_not_in_execute_path" \
--file="CVE-2024-29415.vex.json"
Per testare se la CVE è stata soppressa, possiamo ricostruire l'immagine con un nuovo tag (v2) e copiare la dichiarazione VEX nel filesystem dell'immagine. Questo passaggio è già coperto usando COPY . . nel Dockerfile esistente.
docker buildx build -t felipecruz1638514/node-ip-vex:v2 .
Successivamente, esegui di nuovo l'analisi Docker Scout caricando il documento VEX:
docker scout cves felipecruz1638514/node-ip-vex:v2 --only-cve-id CVE-2024-29415 --vex-location .
✓ Immagine archiviata per l'indicizzazione
✓ Indicizzati 324 pacchetti
✓ Caricato 1 documento VEX
✗ Rilevato 1 pacchetto vulnerabile con 1 vulnerabilità
## Panoramica
│ Immagine Analizzata
────────────────────┼─────────────────────────────────────────
Bersaglio │ felipecruz1638514/node-ip-vex:v2
digest │ 646daafacd8e
piattaforma │ linux/arm64
vulnerabilità │ 0C 1H 0M 0L
dimensione │ 76 MB
pacchetti │ 324
## Pacchetti e Vulnerabilità
0C 1H 0M 0L ip 2.0.1
pkg:npm/[email protected]
✗ ALTA CVE-2024-29415 [Server-Side Request Forgery (SSRF)]
https://scout.docker.com/v/CVE-2024-29415
Intervallo affetto : <=2.0.1
Versione corretta : non corretta
VEX : non affetto [codice vulnerabile non nel percorso di esecuzione]
: [email protected]
1 vulnerabilità trovata in 1 pacchetto
BASSA 0
MEDIA 0
ALTA 1
CRITICA 0
Nota nell'output sopra che CVE-2024-29415 è stata soppressa:
VEX : non affetto [codice vulnerabile non nel percorso di esecuzione]
: [email protected]
Inoltre, puoi usare il flag --only-vex-affected per filtrare la CVE soppressa:
docker scout cves felipecruz1638514/node-ip-vex:v2 --only-cve-id CVE-2024-29415 --vex-location . --only-vex-affected
✓ SBOM dell'immagine già in cache, 324 pacchetti indicizzati
✓ Caricato 1 documento VEX
✓ Nessun pacchetto vulnerabile rilevato
## Panoramica
│ Immagine Analizzata
────────────────────┼─────────────────────────────────────────
Bersaglio │ felipecruz1638514/node-ip-vex:v2
digest │ 646daafacd8e
piattaforma │ linux/arm64
vulnerabilità │ 0C 0H 0M 0L
dimensione │ 76 MB
pacchetti │ 324
Infine, inviamo l'immagine a Docker Scout (scout.docker.com) e ispezioniamola nell'interfaccia:
docker buildx build --sbom=false --provenance=false -t felipecruz1638514/node-ip-vex:v2 --push .
Nota: I documenti VEX incorporati nel filesystem dell'immagine non vengono considerati per le immagini che hanno attestazioni. Se la tua immagine ha attestazioni, Docker Scout cercherà le eccezioni solo nelle attestazioni, e non nel filesystem dell'immagine. Ecco perché abbiamo disabilitato SBOM e provenance nel comando
docker buildx build.
Nel sito web di Docker Scout il tag v2 non mostra più la vulnerabilità CVE-2024-29415 con gravità ALTA poiché Scout tiene conto del documento VEX incorporato nel filesystem dell'immagine.

Nella pagina dei dettagli dell'immagine, possiamo vedere il documento VEX che è stato caricato dal filesystem dell'immagine:
