发布日期: 2026 年 9 月 19 日
风险等级: 高危(High)
漏洞编号: CVE-2026-61833
CVSS: 约 8.1(High;CVSS v3.1,CNA:GitHub)
相关公告: GHSA-qg67-7m6v-qg25 · NVD · CVE-2026-61833
一、漏洞概述
zot 是基于 OCI Distribution 规范的容器镜像 / Artifact 仓库,常作为私有 registry 或边缘缓存部署,生产环境多以官方容器镜像 ghcr.io/project-zot/zot 运行。
经官方确认,2.1.18 之前 的 zot 在 Bearer 鉴权 路径存在不当授权(CWE-285):
- 动作映射坍缩:
pkg/api/authn.go中 Bearer 鉴权将 HTTP 方法映射为 token scope 时,对非GET/HEAD一律赋值为push,因此DELETE从未被映射为独立的delete动作。 - 细粒度鉴权被绕过:Bearer 已认证请求会 跳过
DistSpecAuthzHandler(该中间件本可区分 create / read / update / delete)。 - 删除处理器无二次校验:
DeleteManifest/DeleteBlob在执行删除前 没有 独立的 delete 权限检查。
结果是:持有仓库范围内 pull,push、不含 delete 的 Bearer token,仍可对 /v2/.../manifests/...、/v2/.../blobs/... 发起 DELETE,成功删除清单与 blob。这与 Docker Distribution Token Authentication Specification 将 delete 与 push 分开的约定不符,也与 distribution 参考实现对 DELETE 映射 delete 的行为不一致。
重要说明: 利用需 已持有 push 级 Bearer token(非完全未认证远程扫库即可打穿)。CI/CD 常按最小权限只签发
pull,push,一旦 token 被盗或滥用,影响等同于 越权删库内容(完整性与可用性)。
二、漏洞状态
统计截止: 2026 年 9 月 19 日(UTC+8)
| 项目 | 状态 |
|---|---|
| 漏洞细节 | 已公开(GitHub Security Advisory / NVD) |
| 漏洞类型 | 不当授权 / 权限提升至删除(CWE-285) |
| 官方补丁 | 已发布(≥ 2.1.18) |
| 前置条件 | 启用 Bearer 鉴权,且攻击者持有目标仓库 scope 的 push 级 token |
| 在野大规模利用 | 暂未发现公开大规模在野攻击报道 |
三、影响范围
1. 版本与发行形态
| 发行形态 | 受影响范围 |
|---|---|
| zot 二进制 / 源码构建 | < 2.1.18 |
官方镜像 ghcr.io/project-zot/zot(及 zot-minimal 等同源构建) | 镜像内 zot < 2.1.18 的 tag |
| Helm / 自建二次镜像 | 运行时版本 < 2.1.18 |
修复线: zot ≥ 2.1.18(官方 Release:v2.1.18)。
披露时 GHSA 曾标注受影响至 ≤ v2.1.15;NVD 描述为 Prior to 2.1.18。实操请以 升到 ≥ 2.1.18 为准,勿停留在中间版本。
2. 典型受影响场景
- 私有 / 边缘 zot 仓库开启 Bearer / token 鉴权
- CI、CD、机器人仅被授予
repository:<name>:pull,push,期望「能推不能删」 - 对外暴露
/v2/API,且 push token 可能经日志、制品库、被攻陷流水线泄露
风险边界提示:
- 未启用 Bearer、或仅使用已正确区分 delete 的原生 ACL 路径时,本 CVE 的直接触发面不同;仍建议统一升级。
- 影响为 仓库范围内 的清单 / blob 删除(标签不可拉取、层被删、历史可被改写),不等于未授权登录整个管理系统。
四、修复建议
1. 升级 zot 至 ≥ 2.1.18(推荐)
| 形态 | 最低建议安全版本 |
|---|---|
| zot 发行版 / 二进制 | ≥ 2.1.18 |
容器镜像 ghcr.io/project-zot/zot | 选用 v2.1.18 或更高 的明确版本 tag |
官方容器镜像(GHCR): ghcr.io/project-zot/zot
坐标示例:ghcr.io/project-zot/zot:v2.1.18(说明见 Released Images)。官方镜像在 GHCR,无 Docker Hub 官方同名仓库。
轩辕镜像: ghcr.io/project-zot/zot
拉取示例(将 *** 换成你在 个人中心 的 GHCR 专属域前缀;固定 ≥ v2.1.18):
bashdocker pull ***-ghcr.xuanyuan.run/project-zot/zot:v2.1.18
2. 版本自查
bash# 以实际二进制 / 容器入口为准 zot --version # 或 docker exec <container> zot --version
若版本 小于 2.1.18,应尽快更换镜像 tag 或二进制后滚动重启 registry,并确认 Bearer / token 服务配置仍指向新实例。
3. 升级后建议一并做的操作
- 轮换 可能已泄露的 CI push token / registry 凭据
- 审计近期对
/v2/.../manifests/、/v2/.../blobs/的 异常 DELETE(202 Accepted 后资源 404) - 核对 token 签发策略:需要删除能力时显式授予
delete,默认流水线勿发长期万能 token
五、临时缓解措施
在无法立即完成升级前,建议:
-
收紧 Bearer token 发放与保管
缩短 CI token TTL;禁止把 push token 写入不可信日志 / 公开制品;对异常 DELETE 做告警。 -
网络与管理面 ACL
限制谁能直连 registry/v2/写路径;管理删除操作尽量走受控运维通道。 -
备份与可恢复性
对关键仓库做定期备份 / 同步,降低「push token 被滥用删标签」后的恢复成本(不能替代升级)。 -
仍优先安排正式升级
根因在鉴权映射与中间件绕过;临时措施无法从协议层纠正 DELETE → push 的错误映射。
六、与轩辕镜像用户的相关说明
轩辕镜像提供的是 镜像加速与拉取服务,不替代 你对 zot 版本的升级与 token 治理。
- 可通过轩辕加速拉取 GHCR 上的
project-zot/zot,站内页:ghcr.io/project-zot/zot;命令形如***-ghcr.xuanyuan.run/project-zot/zot:v2.1.18(***为你的专属前缀)。 - 加速拉取 不会自动变成安全版本,须固定 ≥ v2.1.18。
- GHCR 专属域配置见:GHCR 拉取教程;排错见:镜像拉取 FAQ。
七、参考链接
- NVD:CVE-2026-61833
- GitHub Security Advisory:GHSA-qg67-7m6v-qg25
- 修复版本 Release:v2.1.18
- 官方容器包(GHCR):project-zot/zot
- 官方镜像说明:Released Images
- 轩辕站内镜像页:ghcr.io/project-zot/zot
- 项目主页:https://github.com/project-zot/zot
轩辕镜像安全团队
2026 年 9 月 19 日
评论交流
免责声明
本博客文章所提供的内容、技术方案、配置示例及部署指南等信息,仅供学习交流和技术参考使用。文章内容基于发布时的技术环境和版本信息编写,可能因时间推移、技术更新或环境差异而存在不适用的情况。
用户在参考本博客内容进行部署操作前,应当充分了解相关技术风险,并建议在测试环境中进行充分验证和测试,确认无误后再考虑在生产环境中使用。生产环境部署前,请务必进行数据备份,并制定相应的回滚方案。
用户因使用本博客内容进行部署操作而产生的任何损失、数据丢失、系统故障、安全风险或其他问题,均由用户自行承担全部责任。轩辕镜像官方不对因使用本博客内容而产生的任何直接或间接损失承担责任。
本免责声明的最终解释权归轩辕镜像官方所有。
