SleeperGem 利用三个恶意 RubyGems 包攻击开发者机器
导语:网络安全研究人员披露了一项针对 Ruby 生态系统的新软件供应链攻击 SleeperGem。三个被发布到 RubyGems 的恶意 gem 包旨在投递额外有效载荷,并在开发者的机器上植入持久化后门。
网络安全研究人员披露了一项针对 Ruby 生态系统的新软件供应链攻击,代号为 SleeperGem。三个被发布到 RubyGems 的恶意 gem 包用于投递额外的有效载荷,目标是在开发者机器上植入持久化后门。
StepSecurity 在分析中表示:"每个恶意版本都是一个加载器。它从攻击者控制的 Forgejo 主机获取第二阶段载荷,检查是否在构建系统中运行,如果是则跳过,而在开发者机器上它会投放一个原生守护进程并安装持久化机制。"
该攻击一个最显著的特点是,"git_credential_manager" 模仿了官方的 Microsoft Git Credential Manager,而其他两个包在获得恶意更新之前已经休眠多年。"Dendreo" 最后一次更新是在 2020 年 10 月 24 日,"fastlane-plugin-run_tests_firebase_testlab" 自 2019 年 3 月 9 日起就一直处于不活跃状态,之后才收到新的恶意版本。此次活动的另一个显著特征是,这些版本直接发布到了注册中心,但在源项目中没有任何匹配的提交或标签。
"git_credential_manager" 已被添加为五个包的依赖项,包括 "Dendreo" 和 "fastlane-plugin-run_tests_firebase_testlab",这使得恶意载荷能够有效地传播到这些包的现有用户。除 "fastlane-plugin-run_tests_firebase_testlab" 外,所有上述包均由同一账户("LR-DEV")维护。该 gem 属于另一个维护者("pinkroom")这一事实表明,可能有不止一个账户被攻陷,从而将恶意版本推送到 RubyGems。
一旦安装,这些包中嵌入的恶意软件会扫描受感染系统中约 30 个环境变量,包括与 GitHub Actions、GitLab、CircleCI、Travis、Jenkins 和 Vercel 相关的变量。如果发现任何这些变量,它会立即退出。该检查被认为是有意尝试避免在临时 CI 运行器上运行,并确保在开发者机器上执行。对于 "git_credential_manager",恶意代码在该库被调用时触发,导致它从一个公共 Forgejo 实例(git[.]disroot[.]org/git-ecosystem)下载两个有效载荷:一个 shell 脚本("deploy.sh")和一个与该 gem 模仿的工具同名的原生二进制文件。在 Windows 上,检索到的有效载荷通过 PowerShell 执行。

虽然 2.8.2 版本仅用于暂存有效载荷,但 2.8.3 版本则进入攻击的下一阶段。这涉及使用安装脚本将二进制文件作为后台守护进程启动,之后它使用 cron 条目和 systemd 用户服务建立持久化,并查询 sudo 和 wheel 组。StepSecurity 表示:"如果用户可以无密码运行 sudo,该脚本会以 root 身份重新运行自己,当以 root 身份运行时,它会在一个模仿网络工具的路径上植入系统 shell 的 setuid root 副本。"
建议已安装任何上述 gem 的用户将机器和关联的密钥视为已被攻陷。还建议删除位于 ~/.local/share/gcm/ 的已投放守护进程,擦除持久化机制,检查 /usr/local/sbin/ping6 处是否存在 setuid shell,并轮换所有凭据。Aikido Security 研究员 Charlie Eriksen 表示:"一个沉寂了六到七年的 RubyGems 账户对任何人来说看起来都不危险。这正是值得接管的用户画像。这就是 SleeperGem 名称的由来:不是预先放置的长期攻击者资产,而是一个真实、普通的账户,只是进入了休眠状态,看起来足够无害以至于没人注意到就被劫持了。"
此次披露发生在 RubyGems 短暂暂停账户注册的两个多月前。此前,恶意行为者推送了数十个恶意包,作为协调垃圾发布活动的一部分。与此同时,Socket 研究人员标记了一项平行活动,该活动向注册中心注入了 150 个被滥用为数据外传通道的 gem。本月早些时候,Mend.io 披露了一项未公开的软件供应链攻击的细节,该攻击使用了另一组 14 个 RubyGems 包来存储被盗的凭据数据。具体而言,发现一个恶意浏览器扩展通过本地可访问的 API 收集凭据,使用 JavaScript 和标准 Web API 将信息打包成完全在浏览器内有效的 .gem 文件,并使用硬编码的 RubyGems API 密钥将这些包直接上传到 RubyGems.org。
Maciej Mensfeld 表示:"包括明文密码、SSH 私钥、AWS 凭据、加密钱包助记词、社会保障号码、信用卡号码和银行账户详细信息,涵盖 63 个保险库项目。RubyGems 在这里不是传递机制。它是死信箱(dead drop):一个受信任的高流量域名,被盗数据存放在那里直到攻击者回来取走它,在正常的开发者上传中不可见。"
来源信息
来源:The Hacker News
原文链接:https://thehackernews.com/2026/07/sleepergem-uses-three-malicious.html
作者:info@thehackernews.com (The Hacker News)

