
VEXを使用してCVE-2024-29415を抑制するサンプルプロジェクト
このサンプルプロジェクトは、CVE-2024-29415 の脆弱性がある node-ip npm パッケージに依存しています。
しかし、私たちのプロジェクトは脆弱な関数 .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 ステートメントをイメージファイルシステムにコピーします。このステップは、既存の Dockerfile の COPY . . を使用して既にカバーされています。
docker buildx build -t felipecruz1638514/node-ip-vex:v2 .
次に、VEX ドキュメントを読み込んで Docker Scout 分析を再度実行します。
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) にプッシュし、UI で検査します。
docker buildx build --sbom=false --provenance=false -t felipecruz1638514/node-ip-vex:v2 --push .
注: イメージファイルシステムに埋め込まれた VEX ドキュメントは、アテステーションを持つイメージでは考慮されません。イメージにアテステーションがある場合、Docker Scout はアテステーション内の例外のみを探し、イメージファイルシステムは探しません。そのため、
docker buildx buildコマンドで SBOM と provenance を無効にしました。
Docker Scout の Web サイトでは、Scout がイメージファイルシステムに埋め込まれた VEX ドキュメントを考慮するため、v2 タグに HIGH 重大度の CVE-2024-29415 脆弱性が表示されなくなります。

イメージの詳細ページでは、イメージファイルシステムから読み込まれた VEX ドキュメントを確認できます。
