这是 官方安全公告 的交叉发布。官方帖子还包含使用我们的 PGP 密钥签名的版本。
Rust 安全响应工作组最近收到通知,称 crates.io Web 应用程序中的令牌生成存在安全问题,在调查该问题时,我们发现了一个影响 crates.io API 令牌的额外漏洞。
我们没有证据表明此漏洞在野外被利用,但出于谨慎考虑,我们选择撤销所有现有 API 密钥。您可以在 crates.io/me 生成新的 API 密钥。
概述
直到最近,crates.io 的 API 密钥都是使用 PostgreSQL 随机函数生成的,该函数不是加密安全的随机数生成器。这意味着理论上,攻击者可以观察到足够的随机值来确定随机数生成器的内部状态,并使用此信息来确定最后一次数据库服务器重启之前创建的 API 密钥。
作为对此调查的一部分,我们还发现 API 密钥以明文形式存储。这意味着如果我们的数据库以某种方式被泄露,攻击者将拥有所有当前令牌的 API 访问权限。
缓解措施
我们在生产环境中部署了代码更改,以使用加密安全的随机数生成器,并且我们实现了对数据库中存储的令牌进行哈希处理。
在实践中,利用这两个问题都非常不切实际,我们没有发现任何证据表明它们在野外被利用。但是,出于谨慎考虑,我们选择撤销所有现有的 API 密钥。您可以通过访问 crates.io/me 生成新的 API 密钥。对于由此造成的不便,我们深感抱歉。
致谢
感谢 Jacob Hoffman-Andrews 按照 我们的安全策略 负责任地披露随机数生成器问题。感谢来自 crates.io 团队的 Siân Griffin 和 Justin Geibel 帮助安全响应工作组解决这两个问题。感谢来自安全响应工作组的 Pietro Albini 协调此漏洞的工作。
事件时间线
所有时间均为 UTC 时间。
- 2020-07-11 17:43 - 该问题被报告给 [email protected]
- 2020-07-11 20:56 - 该问题得到确认,crates.io 团队的负责人也被告知
- 2020-07-11 23:48 - 该问题得到确认,并商定了计划的修复方案
- 2020-07-13 08:00 - 修复的开发工作开始
- 2020-07-14 12:53 - 修复在预发布环境中进行测试
- 2020-07-14 19:03 - 修复已部署,现有令牌已撤销,该问题已公开披露