发布日期: 2026 年 10 月 1 日
风险等级: 高危(High)
漏洞编号: CVE-2026-93318 · CVE-2026-93316
涉及镜像: moby/buildkit — 轩辕镜像 · Docker Hub
CVSS: 7.5(High,CVSS 4.0)· 7.1(High,CVSS 4.0)
披露时间: GitHub Security Advisory 发布于 2026 年 9 月 30 日
相关公告: GHSA-f2v9-hprr-32q3 · GHSA-r456-g3gm-cvxf · Release v0.33.1
一、漏洞概述
BuildKit 是 Docker 与多数 CI 用来构建镜像的组件,官方镜像为 moby/buildkit。Docker Engine 29.8.2 的发行说明写明,该版本把内置 BuildKit 更新到 v0.33.1。下面两条都影响 v0.33.0 及更早。
1. CVE-2026-93318:缺少 DiffID 校验导致缓存被篡改(High,7.5)
恶意镜像可以声明与另一镜像相同的层 DiffID,层内容却不同。受影响版本用这个 DiffID 建立缓存和快照身份,却不校验它与真实层内容是否一致,于是缓存里会记下攻击者的层内容。普通 snapshotter 和 stargz 一类惰性拉取 snapshotter 都受影响。
如果带有共享或持久化缓存的 buildkitd 先处理了恶意镜像,之后别人的构建可能把攻击者的层当作基础层挂载,例如替换 /bin/sh。随后的构建步骤就可能读到构建密钥、改写构建产物,或把构建挂起。
会拉取不可信镜像、又共用同一 BuildKit 缓存的环境风险最高。只关闭 stargz 并不能避开,普通 snapshotter 同样受影响。
2. CVE-2026-93316:--cdi-disabled 下 daemon 崩溃(High,7.1)
daemon 以 --cdi-disabled 启动,或在配置文件里使用等价设置(例如 daemon 配置中关闭 CDI)之后,如果有构建尝试使用 CDI 设备,daemon 会 panic。恶意构建或误操作都能触发,结果是 buildkitd 不可用。
只影响启用了该开关、并且提交构建的人能够请求 CDI 设备的环境。未设置该开关时,构建会走常规的 CDI 授权检查,未获授权的请求会干净失败,而不会打垮 daemon。
二、漏洞状态
统计截止: 2026 年 10 月 1 日(UTC+8)
| 项目 | CVE-2026-93318 | CVE-2026-93316 |
|---|---|---|
| 风险 | High(7.5,CVSS 4.0) | High(7.1,CVSS 4.0) |
| 类型 | 缓存 / 快照身份未校验层内容(CWE-354) | --cdi-disabled 时 daemon panic |
| 受影响版本 | ≤ v0.33.0 | ≤ v0.33.0 |
| 0.33 修复线 | ≥ v0.33.1 | ≥ v0.33.1 |
| 0.32 公告修复线 | v0.32.2 及以上 | v0.32.3 及以上 |
| CISA KEV | 未列入 | 未列入 |
Docker Hub 上已有 moby/buildkit:v0.33.1。两条一起修时,使用这一标签。
三、影响范围
1. 版本与发行形态
| 发行形态 | 受影响范围 | 修复 |
|---|---|---|
独立 buildkitd / moby/buildkit | v0.33.0 及更早 | 镜像标签 v0.33.1 或更高 |
| Docker Engine 内置 BuildKit | 引擎带的 BuildKit 低于 v0.33.1 | 引擎 29.8.2 或更高(发行说明中的 BuildKit 为 v0.33.1) |
| 停留在 0.32 线 | DiffID 问题自 v0.32.2 修复;CDI 崩溃自 v0.32.3 修复 | 需要同时盖住两条时,改用 v0.33.1 |
2. 典型受影响场景
- 多个构建共用同一个持久化 buildkitd 缓存,并且会拉取不可信镜像(CVE-2026-93318)
- daemon 显式关闭 CDI,同时允许用户或流水线提交使用 CDI 设备的构建(CVE-2026-93316)
风险边界提示:
- 这种篡改要求恶意镜像先被这个 daemon 处理过,后续构建才会挂到被替换的层。可信构建与不可信构建分开 daemon,或处理完不可信镜像后清掉缓存,可以缩小窗口。
- CDI 崩溃要求开关已经打开。没有设置
--cdi-disabled的 daemon 不走这条 panic 路径。
四、修复建议
1. 升级 BuildKit 到 v0.33.1 或更高(推荐)
| 形态 | 最低建议安全版本 |
|---|---|
moby/buildkit | v0.33.1 |
| Docker Engine 内置 BuildKit | 引擎 29.8.2 或更高 |
Docker Hub: moby/buildkit
轩辕镜像: moby/buildkit
bashdocker pull docker.xuanyuan.run/moby/buildkit:v0.33.1
若使用 Compose 或独立 buildkitd,将 image: 改为上述坐标后执行:
bashdocker compose pull docker compose up -d
使用 Docker Engine 自带的 BuildKit 时,把宿主机引擎升级到 29.8.2 或更高。该版本的发行说明写明内置 BuildKit 为 v0.33.1。引擎侧说明见 Docker Engine 29.8.2 发行说明。
2. 版本自查
独立镜像以标签 v0.33.1 或更高为准。引擎侧执行:
bashdocker version
确认 Engine 版本为 29.8.2 或更高;若另外安装了 Buildx / buildkitd,再核对其自身版本不低于 v0.33.1。
五、临时缓解措施
在完成升级之前,按漏洞分别处理。
针对 CVE-2026-93318
- 可信构建与不可信构建使用不同的 buildkitd,或为不可信来源使用临时 builder。
- 处理完不可信镜像后清理该 daemon 的缓存。
- 只关闭 stargz 不能避开普通 snapshotter 上的同一问题。
针对 CVE-2026-93316
- 去掉 daemon 启动参数和配置文件中的
--cdi-disabled(以及配置里的等价开关)。 - 需要拒绝 CDI 时,改为在每个构建上单独做授权。未授权的 CDI 请求会失败返回,而不会让 daemon panic。
六、与轩辕镜像用户的相关说明
轩辕镜像提供的是镜像加速与拉取服务,不替代你对 BuildKit 或 Docker Engine 的升级。
- 站内页:moby/buildkit。拉取命令为
docker.xuanyuan.run/moby/buildkit:v0.33.1。 - 加速拉取不会自动变成安全版本。请把标签固定为 v0.33.1 或更高,或把宿主机引擎升到 29.8.2 或更高。
- 配置与排错见 轩辕镜像使用手册、镜像拉取 FAQ。
七、参考链接
- GitHub Security Advisory:GHSA-f2v9-hprr-32q3 · GHSA-r456-g3gm-cvxf
- 修复版本:v0.33.1
- NVD:CVE-2026-93318 · CVE-2026-93316
- Docker Engine 29.8.2(内置 BuildKit v0.33.1):发行说明
- Docker Hub:moby/buildkit
- 轩辕站内镜像页:moby/buildkit
- 项目主页:https://github.com/moby/buildkit
轩辕镜像安全团队
2026 年 10 月 1 日
评论交流
免责声明
本博客文章所提供的内容、技术方案、配置示例及部署指南等信息,仅供学习交流和技术参考使用。文章内容基于发布时的技术环境和版本信息编写,可能因时间推移、技术更新或环境差异而存在不适用的情况。
用户在参考本博客内容进行部署操作前,应当充分了解相关技术风险,并建议在测试环境中进行充分验证和测试,确认无误后再考虑在生产环境中使用。生产环境部署前,请务必进行数据备份,并制定相应的回滚方案。
用户因使用本博客内容进行部署操作而产生的任何损失、数据丢失、系统故障、安全风险或其他问题,均由用户自行承担全部责任。轩辕镜像官方不对因使用本博客内容而产生的任何直接或间接损失承担责任。
本免责声明的最终解释权归轩辕镜像官方所有。
