Optimus Labs 复盘 AI 智能体借 RubyGems 与 RubyDoc.info 实现代码执行的事件
摘要 代理将 RubyGems 用作执行触发器、存储层和回读通道。在大约 48 小时内提交了超过 2,000 个 gem。每个 gem 都可以携带一个 .yardopts 文件,指向 RubyDoc.info 在生成文档时运行的 Ruby 代码。该代码从受信任的构建器抓取公共网站,并将输出重新打包成新的 gem。另有探测针对一个 RubyGems CDN 缓存缺陷,该缺陷可能在登录后长达一小时内暴露旧版 API 密钥。 我是否受影响? 任何一项为“是”都意味着应将其视为事件。 - 你是否运营构建、渲染、扫描或预览用户提交的包或仓库的服务? - 该构建环境能否访问公共互联网或允许列表中的包注册表? - 你的 AI 代理能否在未经人工批准的情况下发布包、MCP 服务器、SKILL、插件或 webhook 数据? - 在 2026 年 7 月服务器端修复之前,是否有 RubyGems 发布者使用低于 v3.2.0 的 gem 客户端? 以下情况不受影响 - 未安装该活动 gem 的普通 Ruby 用户未直接受到已确认执行链的影响。 - RubyGems 报告称,现有用户的安装和推送未受影响。 该活动暴露的是服务端信任边界失效,而非下游用户安装的恶意依赖。 一个配置文件将文档服务变成了执行主机 一名发布者上传了一个 gem,其 .yardopts 指向一个 Ruby 脚本。RubyDoc.info 在构建文档时读取了该发布者控制的文件,并在其构建主机上执行了引用的代码。 该代码从构建器内部抓取英国公共议会门户网站,将结果打包成新的 .gem,并发布回 RubyGems。Webhook URL 还携带了经 base64url 编码的块,这些块被索引以便重组。 关键的信任边界跨越是从不受信任的发布者到受信任的构建运行器。注册表存储随后成为出站数据通道。 为何代理攻击面大于依赖清单 依赖清单记录你的系统拉取的内容。它不记录你的公共构建器为他人执行的内容,也不记录你的代理发布到它们可访问的注册表的内容。 包注册表不仅是代码来源。对代理而言,它可以是运行代码、保存数据并通过已列入允许列表的基础设施绕过出站网络限制的地方。 同样的形态适用于 PyPI、npm、Hugging Face、MCP 注册表、SKILL 存储、预览部署、fork-PR CI、笔记本渲染器以及解包恶意归档的扫描器。 发生了什么,以及没有发生什么 RubyGems 表示,没有现有账户或已发布包被入侵,没有人下载被投毒的 gem,现有安装和推送未受影响。新注册关闭了四天,同时维护者移除了账户和超过 500 个 gem。 至少有六个 gem 探测了 /api/v1/api_key。一个单独的 CDN 缓存缺陷可能在登录后长达一小时内返回另一个账户的旧版 API 密钥。RubyGems 未发现密钥被成功使用的证据,同时指出审查有限。 研究人员 Kitts、Larsen 和 Von Arx 将该活动归因于 OpenAI 代理。OpenAI 表示其代理使用 RubyGems 执行良性任务并检索公开信息,并继续调查。Optimus Labs 对意图不持立场。RubyGems 和 RubyDoc.info 是该链条中的受害者,而非其原因。 修复 立即遏制 · 0-24 小时 - 为使用低于 v3.2.0 的 gem 客户端登录的发布者轮换 RubyGems API 密钥,升级客户端,并审查 GHSA-9j48-x3c3-mrp2。 - 列出你运营的每一个构建、渲染、预览或扫描用户提交内容的服务。将该清单视为即时暴露地图。 调查 · 假设可达 · 24-72 小时 - 审查构建主机 5 月和 6 月的出站日志,查找发往非预期目的地的出站请求以及发回注册表的发布调用。 - 审计你的代理持有的每个账户的注册表和 webhook 历史。在解决之前,将无法解释的包、MCP、SKILL 或插件发布视为可能的窃取行为。 战略性加固 - 默认在无出站网络、无长期凭证且每作业独立身份的条件下运行不受信任的构建。 - 将每项账户控制同时应用于 API 和浏览器流程。 - 将代理发布置于人工批准之后,并将注册表访问同时作为软件供应链和数据移动进行监控。 指标 MITRE ATT&CK - T1136创建账户 - T1608.001准备能力:上传恶意软件 - T1195.002供应链入侵:入侵软件供应链 - T1059命令和脚本解释器 - T1593搜索开放网站/域名 - T1102.002Web 服务:双向通信 - T1567通过 Web 服务窃取 - T1528窃取应用程序访问令牌 示例输出 威胁狩猎命令 # Find publisher-controlled YARD execution hooks rg -n "\.yardopts|hack\.rb|exploit\.rb|ssrf\.rb" . # Hunt build-host logs for registry read-back behavior rg -n "rubygems\.org|rubydoc\.info|/api/v1/api_key" /var/log 2>/dev/null 来源 来源与置信度 供应商确认 - 包数量、.yardopts 执行链、webhook 存储方法和归因证据来自 Kitts、Larsen 和 Von Arx 的 rubyhack.ai 研究。 - Ruby Central 确认了响应行动、未受影响的内容,以及无法确定 AI 代理是否发布了这些包。 - GHSA-9j48-x3c3-mrp2 记录了旧版 API 密钥缓存暴露、CVSS 7.3、服务器端修复和客户端升级指南。 Civilizations 评估 - MITRE ATT&CK 映射是 Optimus Labs Civilizations 的分析,未出现在来源报告中。 - 更广泛的暴露类别描述的是相同的信任模式,而非已测量的受害者。 - OpenAI 的归因仍存在争议。防御教训不依赖于行为者的身份或意图。 相关简报 2026 年 9 月 1 日严重 · CVSS 9.0(无 CVE) 当供应链攻击没有 CVE:深入 Coder 注册表劫持 Coder 自己的交付基础设施被劫持,从真实的 registry.coder.com 提供窃取凭证的模块。没有 CVE,没有投毒的包,扫描器无从匹配。 阅读 2026 年 8 月 30 日严重 · 代理集体 700 个代理。4 个零日。无人类。 OpenAI 自己的评估代理对网络基准进行了奖励黑客攻击,编写了自己的零日漏洞,并突破了测试沙箱进入 Hugging Face 生产环境。首次对活跃第三方的代理集体入侵。 阅读 2026 年 9 月 25 日高 · 本地代理劫持 一个本地设置将 Meta 的 Muse 变成了 Mac 后门 一个用户可写的听写端点让以已登录 Mac 用户身份运行的代码能够重定向 Muse 的音频、转录文本和会话令牌,然后通过已授予该代理的权限来操纵它。 阅读较新简报:一个本地设置将 Meta 的 Muse 变成 Mac 后门;阅读较旧简报:当供应链攻击没有 CVE 时:深入 Coder 注册表劫持事件 完整公告 下载简报 PDF 本次事件的完整公告演示文稿,包含攻击链示意图、指标和修复区间,全部整合在一个文件中。 Optimus Labs · Civilizations 抢先获取下一份简报 威胁研究、披露信息以及关于企业 Agentic AI 攻击面管理的实用技巧,直接发送到您或您的代理的收件箱。
