RubyGems包存储库修复了一个严重漏洞

发布时间:2022-05-09 06:40

RubyGems 包存储库修复了一个严重漏洞,该漏洞允许任何人从存储库中取消发布(“yank”)某些 Ruby 包,并使用相同的文件名和版本号重新发布其污染或恶意版本。

指定为 CVE-2022-29176 的严重缺陷存在于 RubyGems.org,它是 npmjs.com 的 Ruby 等效项,托管超过 170,000 个 Ruby 包 (gem),在其生命周期内提供了近 1000 亿次下载。

RubyGems 的初步审计显示,该漏洞在过去 18 个月内未被利用来更改任何 gem,但更深入的审计仍在进行中,结果尚未公布。

劫持宝石:猛拉、更改、重新发布
本周,RubyGems 宣布一个严重的错误可能使任何 RubyGems.org 用户能够提取他们没有授权的 gem 版本,并将 gem 的内容替换为较新的文件。

与用于 NodeJS 包的 npm 类似,RubyGems 是 Ruby 编程语言的包管理器,并为分发已完成的 Ruby 工件(称为“gems”)提供标准化格式。RubyGems.org 注册表是社区的 gem 托管服务,允许开发人员即时发布或安装 gem 并使用一组专门的 API。

如果威胁行为者意识到这样的缺陷,他们可以悄悄地用恶意软件替换合法 Ruby 包的内容——这与 去年被劫持以分发加密货币的 npm 流行的ua-parser-js、coa 和 rc库相呼应矿工和密码窃取者。

尽管 npm 劫持事件源于维护者帐户泄露而不是漏洞利用,但它们造成了严重破坏,因为诸如“ua-parser-js”之类的库已被超过一千个项目使用,包括 Facebook、微软、亚马逊、Instagram、 Google、Slack、

Mozilla、Discord、Elastic、Intuit、Reddit 以及更多知名公司。

就 Ruby 而言,大规模利用此类漏洞可能会对 Ruby 生态系统和整体软件供应链安全造成广泛破坏。

RubyGems 解释说,要利用该漏洞,需要满足以下条件:

目标 gem 的名称中有一个或多个破折号,例如 something-provider。
第一个破折号之前的单词表示 RubyGems.org 上存在的攻击者控制的 gem。
被拉取/更改的宝石要么是在过去 30 天内创建的,要么在 100 多天内未更新。
“例如,gem something-provider可能已被 gem something的所有者接管,”RubyGems 解释道。

“拥有许多 gem 的组织只要拥有名称在破折号之前的 gem,就不会受到攻击,例如,拥有 gem orgname会保护所有名称为orgname-provider 的 gem。”

该漏洞被分配为 CVE-2022-29176,潜伏在 RubyGems 代码的“猛拉动作”中,现已得到修复。

独立开发者和渗透测试者 Greg Molnar 以更深入的技术解释了该缺陷。

目前,RubyGems.org 维护人员不认为该漏洞已被利用,根据对过去 18 个月在平台上进行的 gem 更改进行分析的审计结果。

但注册表所有者表示,正在进行更深入的审计,其结果将在针对此漏洞发布的安全公告中公布,其中还包含一些缓解措施。

“RubyGems.org 会在 gem 版本发布或拉取时向所有 gem 所有者发送电子邮件。我们没有收到任何来自 gem 所有者的支持电子邮件,表明他们的 gem 已在未经授权的情况下被拉取,”该公告称。

RubyGem 开发人员可以通过查看他们的Gemfile.lock 并搜索其平台已更改但版本号保持不变的 gem,来审计他们的应用程序历史记录以查找可能的过去漏洞。

例如,看到您的 gemname-3.1.2 gem 重命名为 gemname-3.1.2-java 可能是漏洞已被利用的迹象之一。

用户 laursisask通过HackerOne报告了该漏洞。

更新:

美国东部时间 5 月 8 日下午 5:17:添加了有关如何检查您的 gem 是否已通过此漏洞被利用的信息。

美国东部时间 5 月 8 日下午 5:35:添加了 Molnar 对该漏洞的技术分析的链接。

客户热线:037125966675