
Projet exemple qui utilise VEX pour supprimer CVE-2024-29415.
Ce projet exemple dépend du paquet npm node-ip qui est vulnérable à CVE-2024-29415. Cependant, comme notre projet n'utilise pas directement la fonction vulnérable .isPublic(), il n'est pas exploitable pour CVE-2024-29415.
Je peux empaqueter mon projet en tant qu'image Docker :
docker buildx build -t felipecruz1638514/node-ip-vex:v1 .
Et exécuter une analyse Docker Scout pour vérifier si mon projet est vulnérable à CVE-2024-29415 :
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
Le résultat de cette commande montre que cette CVE affecte le paquet npm [email protected] dans l'image.
L'étape suivante consiste à générer un document VEX pour ajouter du contexte sur le fait que le simple fait qu'il contienne un paquet vulnérable - [email protected] - ne signifie pas que la vulnérabilité est exploitable pour CVE-2024-29415.
Nous pouvons utiliser vexctl pour créer un document 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"
Pour tester si la CVE a été supprimée, nous pouvons reconstruire l'image sous un nouveau tag (v2) et copier la déclaration VEX dans le système de fichiers de l'image. Cette étape est déjà couverte en utilisant COPY . . dans le Dockerfile existant.
docker buildx build -t felipecruz1638514/node-ip-vex:v2 .
Ensuite, exécutez à nouveau l'analyse Docker Scout en chargeant le document VEX :
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
Remarquez dans le résultat ci-dessus que CVE-2024-29415 a été supprimée :
VEX : not affected [vulnerable code not in execute path]
: [email protected]
Vous pouvez également utiliser le flag --only-vex-affected pour filtrer la CVE supprimée :
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
Enfin, poussons l'image vers Docker Scout (scout.docker.com) et inspectons-la dans l'interface :
docker buildx build --sbom=false --provenance=false -t felipecruz1638514/node-ip-vex:v2 --push .
Note: Les documents VEX intégrés dans le système de fichiers de l'image ne sont pas pris en compte pour les images qui ont des attestations. Si votre image a des attestations, Docker Scout ne cherchera les exceptions que dans les attestations, et non dans le système de fichiers de l'image. C'est pourquoi nous avons désactivé le SBOM et la provenance dans la commande
docker buildx build.
Sur le site Web de Docker Scout, le tag v2 n'affiche plus la vulnérabilité CVE-2024-29415 avec une sévérité HIGH car Scout prend en compte le document VEX intégré dans le système de fichiers de l'image.

Sur la page des détails de l'image, nous pouvons voir le document VEX qui a été chargé depuis le système de fichiers de l'image :
