RubyGems advisory: Possible leak of legacy API keys via improper cache config
10 hours ago
- RubyGems.org 上的一个 CDN 缓存错误导致一个用户的旧版 API 密钥可能被另一个用户访问长达一小时,影响版本低于 3.2.0 的客户端(特别是使用带 gzip 压缩的 GET /api/v1/api_key)。
- 该错误源于响应压缩和缓存头之间的特定交互,使得 Fastly 边缘节点的缓存响应在没有重新认证的情况下错误地提供密钥。
- 作为预防措施,所有旧版 API 密钥已被撤销,并敦促用户检查其 gem 是否存在未授权版本、撤销、所有者更改或 webhook。
- 旧版 API 密钥是具有完整 gem 管理权限的单一凭据(无过期时间或 gem 特定范围),不同于 v3.2.0 引入的带范围的密钥。
- 现有 gem 版本是不可变的且无法更改;风险在于泄露的密钥可能发布新版本、撤销版本或更改所有者,除非启用了 API 请求的多因素认证。
- 此漏洞从 2016 年 10 月持续到 2026 年 7 月,且日志记录有限,难以检测滥用;未发现恶意利用的证据。
- 2026 年 7 月 9 日修复时,添加了适当的缓存控制头并基于 Authorization 进行了区分,同时废弃了旧的登录端点。
- 受影响的用户(使用低于 v3.2.0 的客户端进行 gem signin,或持有旧版密钥)必须通过网站创建新的 API 密钥;建议启用 MFA 和带范围的密钥。
- 时间线:漏洞于 2016 年 10 月引入,2026 年 7 月 6 日报告;7 月 9 日部署修复;7 月 23 日撤销密钥并披露。
- 此事件凸显了加强安全措施的必要性,包括强制使用双因素认证。