
Beispielprojekt, das VEX verwendet, um CVE-2024-29415 zu unterdrücken.
Dieses Beispielprojekt hängt vom npm-Paket node-ip ab, das für CVE-2024-29415 anfällig ist.
Da unser Projekt die anfällige Funktion .isPublic() jedoch nicht direkt verwendet, ist es für CVE-2024-29415 nicht ausnutzbar.
Ich kann mein Projekt als Docker-Image paketieren:
docker buildx build -t felipecruz1638514/node-ip-vex:v1 .
Und führen Sie eine Docker Scout Analyse durch, um zu prüfen, ob mein Projekt für CVE-2024-29415 anfällig ist:
docker scout cves felipecruz1638514/node-ip-vex:v1 --only-cve-id CVE-2024-29415
✓ Image stored for indexing
✓ Indexed 221 packages
✓ Provenance obtained from attestation
✗ Detected 1 vulnerable package with 1 vulnerability
## Overview
│ Analyzed Image
────────────────────┼─────────────────────────────────────
Target │ felipecruz1638514/node-ip-vex:v1
digest │ 972354a74233
platform │ linux/arm64
vulnerabilities │ 0C 1H 0M 0L
size │ 48 MB
packages │ 221
## Packages and Vulnerabilities
0C 1H 0M 0L ip 2.0.1
pkg:npm/[email protected]
✗ HIGH CVE-2024-29415 [Server-Side Request Forgery (SSRF)]
https://scout.docker.com/v/CVE-2024-29415
Affected range : <=2.0.1
Fixed version : not fixed
1 vulnerability found in 1 package
LOW 0
MEDIUM 0
HIGH 1
CRITICAL 0
Die Ausgabe dieses Befehls zeigt, dass diese CVE das npm-Paket [email protected] im Image betrifft.
Der nächste Schritt besteht darin, ein VEX-Dokument zu erstellen, um Kontext hinzuzufügen, dass die Tatsache, dass es ein anfälliges Paket – [email protected] – enthält, nicht bedeutet, dass die Sicherheitslücke für CVE-2024-29415 ausnutzbar ist.
Wir können vexctl verwenden, um ein VEX-Dokument zu erstellen:
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"
Um zu testen, ob die CVE unterdrückt wurde, können wir das Image erneut unter einem neuen Tag (v2) erstellen und die VEX-Anweisung in das Image-Dateisystem kopieren. Dieser Schritt wird bereits durch die Verwendung von COPY . . im vorhandenen Dockerfile abgedeckt.
docker buildx build -t felipecruz1638514/node-ip-vex:v2 .
Führen Sie als Nächstes die Docker Scout Analyse erneut durch, wobei das VEX-Dokument geladen wird:
docker scout cves felipecruz1638514/node-ip-vex:v2 --only-cve-id CVE-2024-29415 --vex-location .
✓ Image stored for indexing
✓ Indexed 324 packages
✓ Loaded 1 VEX document
✗ Detected 1 vulnerable package with 1 vulnerability
## Overview
│ Analyzed Image
────────────────────┼─────────────────────────────────────
Target │ felipecruz1638514/node-ip-vex:v2
digest │ 646daafacd8e
platform │ linux/arm64
vulnerabilities │ 0C 1H 0M 0L
size │ 76 MB
packages │ 324
## Packages and Vulnerabilities
0C 1H 0M 0L ip 2.0.1
pkg:npm/[email protected]
✗ HIGH CVE-2024-29415 [Server-Side Request Forgery (SSRF)]
https://scout.docker.com/v/CVE-2024-29415
Affected range : <=2.0.1
Fixed version : not fixed
VEX : not affected [vulnerable code not in execute path]
: [email protected]
1 vulnerability found in 1 package
LOW 0
MEDIUM 0
HIGH 1
CRITICAL 0
Beachten Sie in der obigen Ausgabe, dass CVE-2024-29415 unterdrückt wurde:
VEX : not affected [vulnerable code not in execute path]
: [email protected]
Außerdem können Sie das Flag --only-vex-affected verwenden, um die unterdrückte CVE herauszufiltern:
docker scout cves felipecruz1638514/node-ip-vex:v2 --only-cve-id CVE-2024-29415 --vex-location . --only-vex-affected
✓ SBOM of image already cached, 324 packages indexed
✓ Loaded 1 VEX document
✓ No vulnerable package detected
## Overview
│ Analyzed Image
────────────────────┼─────────────────────────────────────
Target │ felipecruz1638514/node-ip-vex:v2
digest │ 646daafacd8e
platform │ linux/arm64
vulnerabilities │ 0C 0H 0M 0L
size │ 76 MB
packages │ 324
Abschließend schieben wir das Image zu Docker Scout (scout.docker.com) und überprüfen es in der UI:
docker buildx build --sbom=false --provenance=false -t felipecruz1638514/node-ip-vex:v2 --push .
Hinweis: VEX-Dokumente, die in das Image-Dateisystem eingebettet sind, werden für Images mit Attestierungen nicht berücksichtigt. Wenn Ihr Image Attestierungen hat, sucht Docker Scout nur nach Ausnahmen in den Attestierungen und nicht im Image-Dateisystem. Deshalb haben wir das SBOM und die Provenance im
docker buildx build-Befehl deaktiviert.
Auf der Docker Scout Website zeigt das v2-Tag die Schwachstelle CVE-2024-29415 mit HIGH-Schweregrad nicht mehr an, da Scout das im Image-Dateisystem eingebettete VEX-Dokument berücksichtigt.

Auf der Image-Detailseite können wir das VEX-Dokument sehen, das aus dem Image-Dateisystem geladen wurde:
