docker scout cves

說明顯示在軟體構件中識別出的 CVE(通用漏洞披露)
用法docker scout cves [選項] [映像|目錄|壓縮檔]

說明

docker scout cves 命令會分析軟體構件中的漏洞。

如果未指定映像,則會使用最近建置的映像。

支援以下構件類型

  • 映像
  • OCI 佈局目錄
  • docker save 建立的 Tarball 壓縮檔
  • 本機目錄或檔案

預設情況下,此工具需要映像參考,例如

  • redis
  • curlimages/curl:7.87.0
  • mcr.microsoft.com/dotnet/runtime:7.0

如果您要分析的構件是 OCI 目錄、tarball 壓縮檔、本機檔案或目錄,或者如果您要控制映像的解析來源,則必須在參考前面加上以下其中一個前綴

  • image://(預設)使用本機映像,或者 fallback 到 registry 查詢
  • local:// 使用來自本機映像儲存庫的映像(不執行 registry 查詢)
  • registry:// 使用來自 registry 的映像(不使用本機映像)
  • oci-dir:// 使用 OCI 佈局目錄
  • archive:// 使用由 docker save 建立的 tarball 壓縮檔
  • fs:// 使用本機目錄或檔案
  • sbom:// SPDX 檔案或帶有 SPDX 謂詞的 in-toto 證明檔案或 syft json SBOM 檔案。如果是 sbom:// 前綴,如果未定義檔案,它將嘗試從標準輸入讀取。

選項

選項預設值說明
--details在預設文字輸出中列印詳細資訊
--env環境名稱
--epss顯示 EPSS 分數並根據其 EPSS 分數組織套件的 CVE
--epss-percentile排除 EPSS 分數小於指定百分位數 (0 到 1) 的 CVE
--epss-score排除 EPSS 分數小於指定值 (0 到 1) 的 CVE
-e, --exit-code如果偵測到漏洞,則傳回結束代碼「2」
--formatpackages產生的漏洞報告的輸出格式
- packages:預設輸出,純文字,漏洞按套件分組
- sarif:json Sarif 輸出
- spdx:json SPDX 輸出
- gitlab:json GitLab 輸出
- markdown:markdown 輸出(包含一些 html 標籤,例如可摺疊區塊)
- sbom:json SBOM 輸出
--ignore-base篩選掉從基礎映像引入的 CVE
--ignore-suppressed根據指定的例外範圍篩選在 Scout 例外中找到的 CVE
--locations列印套件位置,包括檔案路徑和層 diff_id
--multi-stage顯示來自多階段 Docker 建置的套件
--only-base僅顯示由基礎映像引入的 CVE
--only-cisa-kev篩選至 CISA KEV 目錄中列出的 CVE
--only-cve-id以逗號分隔的 CVE ID 列表(例如 CVE-2021-45105)進行搜尋
--only-fixed僅篩選可修復的 CVE
--only-metric以逗號分隔的 CVSS 指標列表(例如 AV:N 或 PR:L)來篩選 CVE
--only-package以逗號分隔的正規表達式來篩選套件
--only-package-type以逗號分隔的套件類型列表(例如 apk、deb、rpm、npm、pypi、golang 等)
--only-severity以逗號分隔的嚴重性列表(critical、high、medium、low、unspecified)來篩選 CVE
--only-stage以逗號分隔的多階段 Docker 建置階段名稱列表
--only-unfixed僅篩選未修復的 CVE
--only-vex-affected根據狀態非 affected 的 VEX 陳述式篩選 CVE
--only-vuln-packages與 --format=only-packages 一起使用時,忽略沒有漏洞的套件
--orgDocker 組織的命名空間
-o, --output將報告寫入檔案
--platform要分析的映像平台
--ref如果提供的 tarball 包含多個參考,則使用的參考。
僅能與 archive 一起使用
--vex-author可接受的 VEX 陳述式作者列表
--vex-location包含 VEX 陳述式的目錄或檔案的檔案位置

範例

顯示按套件分組的漏洞

$ docker scout cves alpine
Analyzing image alpine
✓ Image stored for indexing
✓ Indexed 18 packages
✓ No vulnerable package detected

顯示來自 docker save tarball 的漏洞

$ docker save alpine > alpine.tar

$ docker scout cves archive://alpine.tar
Analyzing archive alpine.tar
✓ Archive read
✓ SBOM of image already cached, 18 packages indexed
✓ No vulnerable package detected

顯示來自 OCI 目錄的漏洞

$ skopeo copy --override-os linux docker://alpine oci:alpine

$ docker scout cves oci-dir://alpine
Analyzing OCI directory alpine
✓ OCI directory read
✓ Image stored for indexing
✓ Indexed 19 packages
✓ No vulnerable package detected

顯示來自目前目錄的漏洞

$ docker scout cves fs://.

將漏洞匯出到 SARIF JSON 檔案

$ docker scout cves --format sarif --output alpine.sarif.json alpine
Analyzing image alpine
✓ SBOM of image already cached, 18 packages indexed
✓ No vulnerable package detected
✓ Report written to alpine.sarif.json

顯示 Markdown 輸出

以下範例顯示如何以 Markdown 格式產生漏洞報告。

$ docker scout cves --format markdown alpine
✓ Pulled
✓ SBOM of image already cached, 19 packages indexed
✗ Detected 1 vulnerable package with 3 vulnerabilities
<h2>:mag: Vulnerabilities of <code>alpine</code></h2>

<details open="true"><summary>:package: Image Reference</strong> <code>alpine</code></summary>
<table>
<tr><td>digest</td><td><code>sha256:e3bd82196e98898cae9fe7fbfd6e2436530485974dc4fb3b7ddb69134eda2407</code></td><tr><tr><td>vulnerabilities</td><td><img alt="critical: 0" src="https://img.shields.io/badge/critical-0-lightgrey"/> <img alt="high: 0" src="https://img.shields.io/badge/high-0-lightgrey"/> <img alt="medium: 2" src="https://img.shields.io/badge/medium-2-fbb552"/> <img alt="low: 0" src="https://img.shields.io/badge/low-0-lightgrey"/> <img alt="unspecified: 1" src="https://img.shields.io/badge/unspecified-1-lightgrey"/></td></tr>
<tr><td>platform</td><td>linux/arm64</td></tr>
<tr><td>size</td><td>3.3 MB</td></tr>
<tr><td>packages</td><td>19</td></tr>
</table>
</details></table>
</details>
...

列出特定類型的所有易受攻擊的套件

以下範例顯示如何產生套件列表,僅包含指定類型的套件,且僅顯示易受攻擊的套件。

$ docker scout cves --format only-packages --only-package-type golang --only-vuln-packages golang:1.18.0
✓ Pulled
✓ SBOM of image already cached, 296 packages indexed
✗ Detected 1 vulnerable package with 40 vulnerabilities

Name   Version   Type         Vulnerabilities
───────────────────────────────────────────────────────────
stdlib  1.18     golang     2C    29H     8M     1L

顯示 EPSS 分數 (--epss)

--epss 旗標會將 漏洞預測評分系統 (EPSS) 分數新增到 docker scout cves 輸出中。EPSS 分數是用於估計軟體漏洞在未來 30 天內於實際環境中被利用的可能性(機率)。分數越高,漏洞被利用的可能性就越大。

$ docker scout cves --epss nginx
 ✓ Provenance obtained from attestation
 ✓ SBOM obtained from attestation, 232 packages indexed
 ✓ Pulled
 ✗ Detected 23 vulnerable packages with a total of 39 vulnerabilities

...

 ✗ HIGH CVE-2023-52425
   https://scout.docker.com/v/CVE-2023-52425
   Affected range  : >=2.5.0-1
   Fixed version   : not fixed
   EPSS Score      : 0.000510
   EPSS Percentile : 0.173680
  • EPSS 分數 是介於 0 到 1 之間的浮點數,表示在未來 30 天內(分數發布後)在實際環境中被利用的可能性。
  • EPSS 百分位數 是目前分數的百分位數,即所有評分漏洞中 EPSS 分數相同或更低所佔的比例。

您可以使用 --epss-score--epss-percentile 旗標,根據這些分數篩選 docker scout cves 的輸出。例如,若只想顯示 EPSS 分數高於 0.5 的漏洞

$ docker scout cves --epss --epss-score 0.5 nginx
 ✓ SBOM of image already cached, 232 packages indexed
 ✓ EPSS scores for 2024-03-01 already cached
 ✗ Detected 1 vulnerable package with 1 vulnerability

...

 ✗ LOW CVE-2023-44487
   https://scout.docker.com/v/CVE-2023-44487
   Affected range  : >=1.22.1-9
   Fixed version   : not fixed
   EPSS Score      : 0.705850
   EPSS Percentile : 0.979410

EPSS 分數每天更新。預設情況下,會顯示最新的可用分數。您可以使用 --epss-date 旗標以 yyyy-mm-dd 的格式手動指定日期以擷取 EPSS 分數。

$ docker scout cves --epss --epss-date 2024-01-02 nginx

列出 SPDX 檔案中的漏洞

以下範例顯示如何使用 syft 從 SPDX 檔案產生漏洞列表。

$ syft -o spdx-json alpine:3.16.1 | docker scout cves sbom://
 ✔ Pulled image
 ✔ Loaded image                                                                                                                              alpine:3.16.1
 ✔ Parsed image                                                                    sha256:3d81c46cd8756ddb6db9ec36fa06a6fb71c287fb265232ba516739dc67a5f07d
 ✔ Cataloged contents                                                                     274a317d88b54f9e67799244a1250cad3fe7080f45249fa9167d1f871218d35f
   ├── ✔ Packages                        [14 packages]
   ├── ✔ File digests                    [75 files]
   ├── ✔ File metadata                   [75 locations]
   └── ✔ Executables                     [16 executables]
    ✗ Detected 2 vulnerable packages with a total of 11 vulnerabilities