docker scout 漏洞
| 描述 | 显示在软件工件中识别出的 CVE |
|---|---|
| 用法 | docker scout cves [OPTIONS] [IMAGE|DIRECTORY|ARCHIVE] |
描述
docker scout cves 命令用于分析软件构件中的漏洞。
如果未指定镜像,则使用最近构建的镜像。
支持以下构件类型:
- 镜像
- OCI 布局目录
- 由
docker save创建的 Tarball 归档 - 本地目录或文件
默认情况下,该工具需要一个镜像引用,例如:
rediscurlimages/curl:7.87.0mcr.microsoft.com/dotnet/runtime:7.0
如果您要分析的产物是 OCI 目录、tarball 归档文件、本地文件或目录,或者您希望控制镜像的解析来源,则必须在引用前加上以下前缀之一:
image://(默认) 使用本地镜像,或回退到注册表查找local://使用本地镜像存储中的镜像(不进行仓库查找)registry://使用来自注册中心的镜像(不使用本地镜像)oci-dir://使用 OCI 布局目录archive://使用由docker save创建的 tarball 归档文件fs://使用本地目录或文件sbom://SPDX 文件或带有 SPDX 谓词的 in-toto 证明文件或syftjson 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 | 生成的漏洞报告输出格式: - 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 | 用于筛选 CVE 的 CVSS 指标(如 AV:N 或 PR:L)列表,以逗号分隔 | |
--only-package | 用于过滤包的逗号分隔正则表达式 | |
--only-package-type | 软件包类型的逗号分隔列表(如 apk, deb, rpm, npm, pypi, golang 等) | |
--only-severity | 以逗号分隔的严重级别列表(严重、高、中、低、未指定),用于筛选 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 包含多个引用,则使用此引用。 只能与归档一起使用 | |
--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 个压缩包的漏洞
$ 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 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