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 对该漏洞的技术分析的链接。
免费试用尝鲜
贴心会员服务
服务可用性
数据安全保障
全年不间断在线
工作时间:早上9:00-下午6:30
河南快米云网络科技有限公司
公安备案编号:41010302002363
Copyright © 2010-2023 All Rights Reserved. 地址:河南自由贸易区开封片区经济开发区宋城路122号