docker scout cves
描述 | 顯示軟體工件中發現的 CVE |
---|---|
用法 | docker scout cves [OPTIONS] [IMAGE|DIRECTORY|ARCHIVE] |
描述
docker scout cves
命令分析軟體工件中的漏洞。
如果未指定映象,則使用最近構建的映象。
支援以下工件型別:
- 映象
- OCI 佈局目錄
- 由
docker save
建立的 Tarball 存檔 - 本地目錄或檔案
預設情況下,該工具需要一個映象引用,例如:
redis
curlimages/curl:7.87.0
mcr.microsoft.com/dotnet/runtime:7.0
如果您要分析的工件是 OCI 目錄、tarball 存檔、本地檔案或目錄,或者如果您想控制映象的解析來源,則必須在引用前加上以下字首之一:
image://
(預設)使用本地映象,或回退到登錄檔查詢local://
使用本地映象儲存中的映象(不進行登錄檔查詢)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' | |
--format | 包 | 生成漏洞報告的輸出格式 - 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 | 按狀態為“不受影響”的 VEX 宣告過濾 CVE | |
--only-vuln-packages | 與 --format=only-packages 一起使用時,忽略沒有漏洞的包 | |
--org | Docker 組織的名稱空間 | |
-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
標誌將 Exploit Prediction Scoring System (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 Score
是一個介於 0 和 1 之間的浮點數,表示在未來 30 天內(分數釋出後)在野外被利用的機率。EPSS Percentile
是當前分數的百分位數,即所有具有相同或更低 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