Docker 修复存在两年的 Hub 严重漏洞:一个用户可冒充另一个用户推送镜像
- 浏览次数 173
- 喜欢 0
Docker Hub——用于发布和下载容器镜像的注册表——中的一个漏洞,让一个用户可以冒充另一个用户推送、拉取或删除镜像。Docker 于 9 月 30 日修复了该漏洞,并表示没有发现任何人利用它的证据。
Docker 在 10 月 12 日的一份安全公告中表示,该漏洞存在于将个人账户转换为组织的功能中。转换会将账户的个人访问令牌(PAT)转移给被指定为组织所有者的用户。PAT 在注册表中用于替代密码,而创建每个令牌的人仍然可以使用它。
该访问权限仅限于注册表。它不会触及 Docker Hub 网页界面,也无法用于更改密码、电子邮件地址或双因素设置,或接管账户。
Docker 将该漏洞追踪为 CVE-2026-105445,并将其评为严重。它于 10 月 13 日发布的 CVE 记录给该漏洞的 CVSS 4.0 评分为 9.4。
该漏洞从 2024 年 8 月 26 日起一直存在,直到修复,历时略超两年。Docker 是在 Docker Hub 本身上进行修复的,因此无需安装任何更新。
Docker Hub 无法将仓库从一个账户移动到另一个账户。用户改为将个人账户转换为一个保持相同名称的组织,并且必须指定一个现有账户作为其所有者。
每个个人访问令牌都以其所有者账户的身份行事,权限级别在创建令牌时选定。在漏洞存在期间,转换会更改每个令牌所记录的所有者,而其密钥保持不变。
攻击者可以利用这一点:在他们控制的账户上创建一个令牌,将该账户转换为组织,并指定另一个用户为其所有者。该令牌随后就会以该用户的身份在注册表中生效。
据 Docker 和报告该漏洞的研究人员称,被指定的所有者没有被要求确认这一变更,也没有收到通知。Docker 的转换页面至少自 2024 年 8 月起就包含了这样一句话:"新所有者将收到一封通知邮件。"
在令牌的权限级别内,被转移的令牌可以在被指定所有者的仓库以及该所有者可访问的组织中拉取、推送或删除镜像。
Docker 将该漏洞评为严重,因为它表示该访问权限"包括以合法名义发布镜像"。
据 Docker 称,在 3 月和 4 月,攻击者利用窃取的发布者凭证,将恶意 Trivy 镜像和恶意 KICS 镜像推送到发布者自己的 Docker Hub 仓库。
mptrdev.com 的 Peter Molnar 和 Krisztian Hozak 发现了该漏洞并向 Docker 报告,Docker 称其在收到报告后不到四小时就部署了修复。他们将此漏洞命名为 GhostPat。
在他们的技术文章中,两人表示他们在经同意的测试账户上两次复现了该漏洞。他们以目标账户身份登录注册表,在其命名空间中创建并推送了一个仓库,推送到了它所属的一个组织,并拉取了它的私有仓库。
Docker 的审查涵盖了哪些内容
Docker 审查了漏洞存在期间进行的每一次账户转换,并将它们与注册表日志和令牌记录进行比对。它查找了任何以多个身份使用的令牌,并检查了用被转移令牌进行的每一次推送,总共约 304,000 次。
"我们没有发现该漏洞被利用的证据," 该公司表示。
据 Docker 称,所有这些推送都指向了被转换组织或其被指定所有者所属的仓库。在绝大多数情况下,两个账户都属于同一个人或团队。
在无法确认两个账户由同一人控制的情况下,Docker 在不运行的情况下分析了风险最高的公开镜像,未发现恶意软件或篡改。
Docker 的注册表日志记录的是令牌何时被使用,而非它是否存在,因此一个从未被使用过的被转移令牌不会在日志中留下任何记录。因此,Docker 将漏洞存在期间因转换而转移的每一个令牌都视为可能受影响,无论它是否曾被使用。
该公告报告的是推送的结果。它没有说明 Docker 对使用被转移令牌进行的拉取或删除(包括从私有仓库拉取)有何发现。
谁被通知了以及需要检查什么
10 月 2 日,Docker 向账户收到被转移令牌的用户发送了电子邮件,并单独向相关组织的所有者发送了邮件。每封邮件都按描述和创建日期列出了这些令牌。
该公告没有说明这涵盖了多少用户或令牌,仅将这一群体称为"数量有限"的用户。
据 Docker 称,任何没有收到该邮件的人都没有受到影响,无需采取任何行动。
10 月 8 日,Docker 停用了它已识别出的被转移令牌。那些其所有者要求保留的令牌没有被停用。
发布名为 compose-lint 的 Docker Compose 代码检查工具的 Todd Matens 在一篇博客文章中写道,他在 10 月 2 日收到了两封邮件。一封是作为组织所有者发给他的,另一封是发给他的用户账户的。他轮换了自己的两个 CI 令牌,并检查了他 42 个已发布镜像的签名,将每一个都追溯到构建它的那次 CI 运行。
Docker 建议用户审查自己的令牌,吊销任何不认识或不再使用的令牌,并对属于组织的自动化使用组织访问令牌,而非某个人的 PAT。
以下细节有助于这些检查:
- 打开账户设置,然后打开个人访问令牌。该列表会显示每个令牌的创建时间以及最后使用时间。
- 研究人员描述了两条线索。一条是你没有创建的令牌,无论其名称是什么,因为创建令牌的人会选择其描述。另一条是账户切换器中一个你不记得加入过的组织。
- 组织访问令牌需要 Docker Team 或 Docker Business 订阅。它们由组织所有者、公司所有者或拥有该权限的自定义角色管理,并且不适用于 Docker Desktop 或 Image Access Management。
- 拥有这些订阅的组织所有者可以在活动日志中审查过去的推送,日志记录了被推送的标签,并且可以显示推送它们的令牌。查看日志的 Docker Home 会将它们保留 30 天,更早的记录可通过 Docker Hub API 获取。
Docker 的文档曾描述过这种转移
在该漏洞存在的大约 25 个月中,Docker 自己的文档有约 17 个月描述了这种令牌转移。2025 年 4 月 22 日的一次文档更改在 Docker 的转换页面上添加了一条注释。它说,指定一个用户为组织所有者"将确保与该用户账户关联的任何 PAT 都被转移给组织所有者"。
Docker 于 9 月 30 日移除了该注释,就在其给出的修复时间后几分钟。这些日期来自 Docker 文档的公开历史记录,The Hacker News 对此进行了查阅。
Docker 表示,它现在要求在被指定为组织所有者之前获得同意,并在此发生时通知该用户。它还会记录令牌所有权的每一次变更,并审查其他会改变凭证归属的功能。