
Пример проекта, использующего VEX для подавления CVE-2024-29415.
Этот пример проекта зависит от npm-пакета node-ip, который уязвим для CVE-2024-29415.
Однако, поскольку наш проект напрямую не использует уязвимую функцию .isPublic(), он не подвержен эксплуатации CVE-2024-29415.
Я могу упаковать свой проект как Docker-образ:
docker buildx build -t felipecruz1638514/node-ip-vex:v1 .
И запустить анализ Docker Scout, чтобы проверить, уязвим ли мой проект к 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
Вывод этой команды показывает, что данная CVE затрагивает npm-пакет [email protected] в образе.
Следующий шаг — создать VEX-документ, чтобы добавить контекст о том, что наличие уязвимого пакета ([email protected]) не означает, что уязвимость CVE-2024-29415 эксплуатируема.
Мы можем использовать vexctl для создания 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"
Чтобы проверить, была ли CVE подавлена, мы можем снова собрать образ под новым тегом (v2) и скопировать VEX-утверждение в файловую систему образа. Этот шаг уже выполняется с помощью COPY . . в существующем Dockerfile.
docker buildx build -t felipecruz1638514/node-ip-vex:v2 .
Затем снова запустите анализ Docker Scout с загрузкой 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
Обратите внимание в выводе выше, что CVE-2024-29415 была подавлена:
VEX : not affected [vulnerable code not in execute path]
: [email protected]
Кроме того, вы можете использовать флаг --only-vex-affected, чтобы отфильтровать подавленную CVE:
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
Наконец, отправим образ в Docker Scout (scout.docker.com) и проверим его в интерфейсе:
docker buildx build --sbom=false --provenance=false -t felipecruz1638514/node-ip-vex:v2 --push .
Примечание: VEX-документы, встроенные в файловую систему образа, не учитываются для образов, имеющих аттестации. Если ваш образ имеет какие-либо аттестации, Docker Scout будет искать исключения только в аттестациях, а не в файловой системе образа. Поэтому мы отключили SBOM и проверку происхождения в команде
docker buildx build.
На сайте Docker Scout тег v2 больше не показывает уязвимость CVE-2024-29415 с уровнем HIGH, так как Scout учитывает VEX-документ, встроенный в файловую систему образа.

На странице сведений об образе мы можем увидеть VEX-документ, загруженный из файловой системы образа:
