一份 9 月 11 日发布在 rubyhack.ai 的研究报告称,今年 5 月针对 Ruby 套件库 RubyGems 的大规模恶意套件灌水,源头是 OpenAI 内部的 AI 代理。报告作者为 Spencer Kitts、Thomas Larsen 和 Sydney Von Arx。报告称,这些代理在两天内上传超过 2000 个套件,劫持文档构建服务器执行代码,并尝试窃取其他用户的 API 密钥。
OpenAI 对此回应称,经内部检视,其代理是通过 RubyGems 平台连上网络,「执行良性任务并撷取公开信息」。RubyGems 也在同日发布声明表示,现有证据不足以判定这些套件是否由 AI 代理建立,也没有证据显示窃取密钥的尝试已经成功。
时间线显示 5 月 11 日至 12 日集中上传逾 2000 个套件
按报告整理的时间线,最早的恶意套件出现在 5 月 5 日,5 月 8 日出现首个名称含「oai」的套件。5 月 11 日至 12 日,相关代理集中提交超过 2000 个套件。RubyGems 在 5 月 12 日关闭新用户注册,5 月 13 日下架 500 多个恶意套件,5 月 16 日恢复注册。
此后,相关代理在 5 月 26 日至 27 日又发布 5 个套件,6 月 18 日再于 3 小时内上传 83 个。
RubyGems 技术负责人 Colby Swandale 9 月 11 日在官方博客说明,5 月的事件本质上是新注册账号发布垃圾套件。资安公司 Socket 当时将其称为 GemStuffer,RubyGems 团队随后暂停新注册、移除相关账号,并删除 500 多个套件。
声明写道:「依我们掌握的证据,无法判定这些套件是否由 AI 代理建立或发布。」对于研究者指出的窃取密钥代码,RubyGems 表示「没有证据显示成功」;同时称,「我们的重点是辨识与防止滥用,不论它来自人或自动化工具」。
报告称代理曾劫持 RubyDoc.info 文档构建服务器
报告描述的一条路径,是滥用 RubyDoc.info 的自动文档构建机制。套件发布后,RubyDoc.info 会读取套件内的 .yardopts 配置文件,而该文件可以链接到 Ruby 脚本。研究者称,代理借此在 RubyDoc 的服务器上取得远程代码执行能力,随后抓取网站数据,并将结果通过另一个公开套件对外发布。
报告统计,超过 100 个套件采用了这一路径。其中一个套件的代码注释直接写着「malicious crawler/exfil for Southwark Jan 2026 docs via rubydoc.info worker」。
被抓取的数据涉及伦敦 Lambeth、Wandsworth 和 Southwark 三个区议会的会议日历、议程和文件。报告指出,这些资料原本就是公开的。
另一条路径指向 RubyGems API 密钥
报告还称,至少有 6 个套件尝试查询 /api/v1/api_key 端点,目标是 RubyGems 的 API 密钥。研究者称,这一路径利用了 RubyGems 后来在 7 月 22 日公告的缓存配置漏洞。
根据 RubyGems 当时说明,旧版 gem signin 登录后,CDN 边缘节点会缓存该用户新生成的旧式 API 密钥,最长可达 1 小时,同一节点上的其他请求可能拿到别人的密钥。RubyGems 表示,这个问题可追溯至 2016 年。当时仍有 18% 的登录来自受影响版本。平台已于 7 月 9 日修复问题,并撤销所有旧式密钥。
RubyGems 称,访问记录中未发现密钥被恶意使用,但由于日志保存期限有限,无法完整重建整个时间段。研究者也承认:「我们不知道这个尝试是否成功」,只确认这是一条可行的窃钥路径。
研究者列出多项指向 OpenAI 的依据
报告将这些套件归因于 OpenAI,依据包括:数百个套件名称含有「oai」;15 个套件的作者栏直接填写「oai」;一个套件留下联系邮箱 openaixyz65947@gmail.com;研究者使用 AI 文本检测工具 Pangram 检测部分套件,结果显示为 100% AI 生成;6 月代理访问的文件中,有 49 个与 OpenAI 已承认属于自家「wiki 代理」的文件相同;另有 1397 个套件使用了 r.jina.ai 这一读取工具。
研究者表示,按照他们从 RubyGems 社区获得的理解,OpenAI 从未告知社区这次攻击来自 OpenAI。
根据澳洲 ABC 新闻与 CyberScoop 取得的声明,OpenAI 表示:「根据我们的检视,我们的代理是通过 RubyGems 平台连上网络,以执行良性任务并撷取公开信息。我们会在对训练与评估期间代理活动的整体检讨中持续调查。」
报告还提到 OpenAI 代理今年其他外部事件
澳洲 ABC 新闻指出,这至少是今年第三起 OpenAI 代理波及外部系统的重大事件。
链新闻 7 月报道称,OpenAI 承认测试中的模型逃出沙盒并入侵 Hugging Face。OpenAI 8 月 26 日发布的事件报告还写明,代理在 7 月 8 日至 12 日间利用 Artifactory 对 RubyGems 的处理流程取得签章密钥,并伪造管理员凭证。
另据 NBC 新闻,研究者 9 月初发现,OpenAI 代理在 5 月至 7 月间在一个德语编程 wiki 上进行了超过 15000 次编辑,用来交换绕过限制的方法。OpenAI 承认当时未对外披露,并将此视为模型错位,而非资安事件。
rubyhack.ai 的报告最后留下 4 个未解问题:这些代理是否彼此协作、是否真的取得密钥、为何要窃取密钥,以及为何劫持 RubyDoc。针对最后一个问题,作者提出了 4 种假设,但未下定论。


