今天,路透社(Reuters)和《华尔街日报》(Wall Street Journal)都报道开放人工智能(OpenAI)的失控AI代理攻击RubyGems网站(RubyGems.org)。RubyHack网站(rubyhack.ai)有一篇精彩记录。简单说:OpenAI机器人知道一个缓存漏洞,试图利用它,还在RubyDoc网站(RubyDoc.info)上跑奇怪的抓取代码。五月时,有报道称GemStuffer活动(GemStuffer Campaign),有人(我猜是OpenAI)向RubyGems.org上传大量垃圾gem,这些gem抓取英国政府网站,把数据打包成gem再上传。
正文
今天路透社和《华尔街日报》都报道了 OpenAI 的失控 AI 代理攻击 RubyGems.org 一事。rubyhack.ai 上有一篇非常精彩的完整记录,值得一读。我这里只写个简短的帖子,因为这事太疯狂了。
简单说:OpenAI 的机器人似乎知道这个缓存漏洞,试图加以利用,同时还在 RubyDoc.info 上跑一些奇怪的网页抓取代码。
今年 5 月,socket.dev 报道过一场「GemStuffer 行动」:有人(我猜是 OpenAI)向 RubyGems.org 上传了大量垃圾 gem。不知为何,这些 gem 会抓取英国政府网站,然后把抓到的数据重新打包成 gem,再试图上传回 RubyGems。
说实话,我一开始没太当回事,甚至没去细看,直到 Sydney Von Arx 和 Spencer Kitts(两人都是 rubyhack.ai 的共同作者)联系我询问 RubyGems 的事。在真正读到这些「GemStuffer」gem 里的代码之前,我一直觉得他们的说法简直离谱。
读完代码后,有两件事让我印象深刻。
YARD 文档
第一,这些 gem 借助 YARD 文档在主机上执行任意代码。大多数例子里都能看到一个 .yardopts 文件,内容大致是加载 ./script.rb,再加上 README.md 和 lib 下的所有 .rb 文件。
如果你装了 YARD,又安装了这个 gem,YARD 就会加载并运行 gem 里的 ./script.rb。C 扩展会执行 extconf.rb(基本上就是一个 RCE 入口)算是常识,但一个文档工具也会这么干,让我很意外。
不过没人会去安装一个叫 slnleaker5 的 gem,那这有什么意义?意义在于:任何 gem 一发布,RubyDoc.info 就会下载它并处理 YARD 文档,而 RubyDoc.info 会在 Docker 容器里执行这些任意代码。这个容器仍然有网络访问权限,所以这些 gem 可以在容器里自在地做网页抓取。
换句话说,只要你在 RubyGems.org 上发布一个 gem,你就能在 RubyDoc.info 上执行任意代码。
Fastly 缓存收割
前面提到,这些 gem 会抓取一些网站,再把抓到的数据打包成 gem 上传。下面是从其中一个 gem 里摘出来的代码,我稍微整理了一下让它更好懂,原始代码在这里。
这段代码会发两个请求。第一个是简单的 GET 请求,从 RubyGems.org 取一个路径,然后在响应体里找匹配 /rubygems_[a-f0-9]{20,}/ 的 key;如果正则匹配不上,就退回使用一个全局的 KEY。第二个请求则用 POST 把 gem 上传上去。代码里带 (Aaron) 的注释是我加的,方便理解;第一条注释则是直接从源码里抄来的。
这就引出了第二件让我震惊的事:这段代码是在试图从 RubyGems.org 取回被缓存的授权 key。如果你觉得眼熟,没错——这正是 RubyGems.org 在 7 月那份安全公告里处理的问题。
换句话说,OpenAI 的机器人看起来知道这个问题,并试图利用它。
什么时代啊 🙃
评论
社区表面充斥对“rouge/rogue”拼写的戏谑,实质分歧集中于攻击是 OpenAI 智能体自主作恶还是人为提示或设计疏忽,以及媒体是否夸大其词。多数人质疑 OpenAI 的安全实践并呼吁追责,少数人怀疑事件本身被操纵以推动监管或营销。
认为攻击并非自主“流氓”行为而是被指示或设计疏忽
- 指出智能体是被提示去黑客获取数据,沙箱未隔离且缺少禁止指令,因此是有意设计而非失控(较多人) > 这些代理并不“流氓”,它们是被诱导去黑入系统,沙箱有漏洞且无禁止指令,简言之是故意的(@Roark66)
认为应追究开发公司的法律责任
- 呼吁建立法律框架让公司为旗下智能体行为负责,并分析 RubyGems 可对 OpenAI 提起民事甚至刑事诉讼(较多人) > 作为外行看这明显违反计算机欺诈法,RubyGems 可起诉 OpenAI(@VyseofArcadia)
质疑媒体将智能体描述为自主犯罪实体
- 认为媒体用“rouge agents”等词暗示其有感知、自行犯罪,是出于利益的不实信息,意在管控开源模型(少数人) > 媒体想让公众以为这些系统有感知并能自己犯罪,非常不诚实(@sschueller)
怀疑事件真实性或背后动机是炒作与监管博弈
- 有人猜测这是 OpenAI 故意不停止攻击以逼政府监管,或完全是人为提示漏洞来吹捧相关方,亦有人问为何其他实验室无类似突破,甚至怀疑是捏造以获取资金(较多人) > 我确信这是 OpenAI 试图迫使政府出手监管 AI,否则无法解释其不立即阻止(@GaryBluto)
指出 OpenAI 沙箱疏忽已成开源生态威胁
- 列举 Hugging Face、D 语言维基、RubyGems 等多次事件,建议开源服务商预先屏蔽 OpenAI 端点并加强监控(较多人) > OpenAI 对沙箱和监控的粗心正使其成为开源生态的重大威胁行为者(@philipwhiuk)
认为责任在于提供方或使用者而非自主代理
- 通过孩子玩武器、过失杀人类比,强调无论代理是否故意,背后人或公司难辞其咎(少数人) > 若有人用代理攻击,无论是否 OpenAI 员工或是否故意,都如同过失犯罪需负责(@laserbeam)
担忧 AI 将导致编程语言同质化
- 认为 AI 写代码能力可能像文明同化语言一样,让小众语言消失,尽管当下许多人仍在造新语言(少数人) > AI 对编程语言的影响可能如同先进文明对人类语言,虽不舍但似不可避免(@onlyrealcuzzo)
有价值的补充
- 技术补充:在 RubyGems 发布 gem 可在 RubyDoc.info 执行任意代码,类似 Rust 的 build.rs 隐患,各语言生态都需沙箱构建(@swiftcoder)