crates.io 安全公告

2020 年 7 月 14 日 · Rust 安全响应工作组

这是官方安全公告的交叉发布。官方帖子也包含使用我们的 PGP 密钥签名的版本。


Rust 安全响应工作组最近收到通知,crates.io Web 应用程序中的令牌生成存在安全问题。在调查该问题的过程中,我们还发现了影响 crates.io API 令牌的另一个漏洞。

我们没有证据表明该漏洞在野外被利用,但出于谨慎考虑,我们选择撤销所有现有的 API 密钥。您可以在 crates.io/me 生成一个新的密钥。

概述

直到最近,crates.io 的 API 密钥都是使用 PostgreSQL 随机函数生成的,这不是一个密码学安全的随机数生成器。这意味着理论上,攻击者可以观察到足够多的随机值,以确定随机数生成器的内部状态,并使用此信息来确定上次数据库服务器重启之前创建的 API 密钥。

在对此进行调查的过程中,我们还发现 API 密钥以明文形式存储。这意味着如果我们的数据库以某种方式被攻破,攻击者将获得所有当前令牌的 API 访问权限。

缓解措施

我们向生产环境部署了代码更改,以使用密码学安全的随机数生成器,并且我们实现了对数据库中存储的令牌进行哈希处理。

在实践中,利用任何一个问题都是非常不切实际的,并且我们没有发现任何证据表明该漏洞在野外被利用。但是,出于谨慎考虑,我们选择撤销所有现有的 API 密钥。您可以通过访问 crates.io/me 来生成新的 API 密钥。对于由此造成的任何不便,我们深表歉意。

鸣谢

感谢 Jacob Hoffman-Andrews 根据我们的安全政策负责任地披露了随机数生成器问题。感谢 crates.io 团队的 Siân GriffinJustin Geibel 帮助安全响应工作组解决了这两个问题。感谢安全响应工作组的 Pietro Albini 协调此漏洞的工作。

事件时间线

所有时间均以 UTC 列出。

  • 2020-07-11 17:43 - 该问题报告给 security@rust-lang.org
  • 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 - 部署修复程序,撤销现有令牌,并公开披露该问题