RubyGems.org 中允许欺骗其他人的包的漏洞

RubyGems.org 程序包存储库中已发现一个严重漏洞 (CVE-2022-29176),该漏洞允许在没有适当权限的情况下,通过启动合法程序包的抽出并在其位置加载来替换存储库中其他人的程序包另一个具有相同名称和版本号的文件。

要成功利用该漏洞,必须满足三个条件:

  • 该攻击只能针对名称中带有连字符的数据包进行。
  • 攻击者必须能够在连字符之前放置一个包含部分名称的 gem 包。 例如,如果攻击针对“rails-html-sanitizer”包,则攻击者必须将自己的“rails-html”包放入存储库中。
  • 受到攻击的软件包必须是在过去 30 天内创建的或 100 天内未更新。

该漏洞是由“yank”操作处理程序中的错误引起的,该处理程序将连字符后面的名称部分解释为平台名称,从而可以启动删除与该名称部分匹配的外部包连字符之前。 特别是,在“yank”处理程序代码中,“find_by!(full_name: "#{rubygem.name}-#{slug}")”调用用于查找包,而“slug”参数由包所有者来确定要删除的版本。 包“rails-html”的所有者可以指定“sanitizer-1.2.3”而不是版本“1.2.3”,这将导致该操作应用于其他人的包“rails-html-sanitizer-1.2.3” ”。

一名安全研究人员发现该问题是 HackerOne 赏金计划的一部分,该计划旨在查找已知开源项目中的安全问题。 该问题于 5 月 18 日在 RubyGems.org 中得到修复,据开发人员称,他们尚未在过去 XNUMX 个月的日志中发现任何利用该漏洞的痕迹。 同时,目前仅进行了表面审计,未来计划进行更深入的审计。

要检查您的项目,建议分析 Gemfile.lock 文件中的操作历史记录;恶意活动表现为存在名称和版本的保留或平台的更改(例如,当 gemname -1.2.3 包更新为 gemname-1.2.3-java)。 作为防止持续集成系统中或发布项目时隐藏包替换的解决方法,建议开发人员使用带有“-frozen”或“-deployment”选项的 Bundler 来修复依赖项。

来源: opennet.ru

添加评论