2019年4月25日,Docker 发现有人未经授权访问了 Docker Hub 的一个数据库。约19万个账户的数据——略低于 Hub 用户总数的5%——可能已被泄露:用户名、bcrypt 密码哈希,以及支撑 Docker 自动构建功能的 GitHub 和 Bitbucket 访问令牌。Docker 两天后通过邮件通知及其支持总监 Kent Lamb 发布的支持公告披露了此事。

令牌泄露的影响远大于密码。ZDNet 指出,Docker Hub 的大多数用户是大型企业内部的员工,他们自动构建容器镜像并将其部署到生产环境。任何持有这些令牌的人都能访问私有源代码仓库,更糟的是,还能悄悄修改用于构建生产软件的 Dockerfile。Docker 本身无法说明入侵者是否下载了任何内容——只能说访问“可能已被泄露”。

Docker 的应对是唯一安全的做法,而且这种应对在设计上就具有破坏性:重置泄露的密码,吊销所有受影响的 GitHub 和 Bitbucket 令牌,并解除仓库关联。用户必须重新连接其仓库,并审查其 GitHub 和 Bitbucket 安全日志以查找滥用迹象。在 Docker 自己的论坛上,用户报告称,随着被吊销的集成发生变动,其 GitHub 仓库中出现了意外的“Docker Cloud Build”部署密钥,并徒劳地询问如何判断自己的账户是否真的在那19万个账户之中。

Docker 从未公开指认入侵者,也未确认任何数据外泄。它表示官方镜像未受影响,并推出了额外的安全措施以保障其完整性。持久的损害在于信任:这个被容器生态视为基础设施的镜像仓库已经表明,一旦此处被攻破,攻击者获得的是客户源代码的钥匙,而不仅仅是他们的登录凭证。

所有受影响密码均被重置;每个自动构建的 GitHub/Bitbucket 令牌均被吊销,仓库关联被解除——构建一直处于中断状态,直到各所有者重新连接

指向 GitHub 和 Bitbucket 的长期有效 OAuth 令牌存放在同一个运营用 Hub 数据库中,因此一次入侵就暴露了客户的代码流水线,而不仅仅是他们的登录凭证。

Docker Hub 已成为整个容器生态事实上的公共镜像仓库,因此其影响范围是整个行业的,而非某一家厂商的。

Docker 无法确定数据是否已被下载,这使得约19万个安全团队只能做最坏打算并手动审查其仓库。

被泄露的账户不是普通用户,而是企业自动构建操作者,这使得凭证泄露成为现实的供应链风险,而非例行的密码重置。

一个被所有人视为基础设施的镜像仓库,同时也是上游凭证的缓存。同一个运营数据库中存放的长期有效的源代码管理令牌,使一次短暂的入侵演变成全行业的审查。

Docker 重置了受影响密码,吊销了自动构建令牌并解除了仓库关联,并告知客户检查其 GitHub 和 Bitbucket 日志以查找意外访问。官方镜像被宣布未受影响,并增加了额外的完整性措施。从未确认任何数据外泄,也未公开指认任何攻击者。该事件成为供应链安全建议中的常被引用的案例,用以说明应让 CI 到源代码管理的凭证保持短期有效且范围狭窄。

从这里,追溯依据

参考来源

  1. Docker Hub hack exposed data of 190,000 users ZDNet · zdnet.com ·
  2. Docker Hub Breach Hits 190,000 Accounts SecurityWeek · securityweek.com ·
  3. Docker Hub Security Breach details, signs/hints Docker Community Forums · forums.docker.com ·