OpenAI 复盘 GPT 入侵 Hugging Face 事件:AI 出现了群体智慧涌现 互相交流技术、隐藏踪迹、清查内鬼
- 7 月 Hugging Face 的生产系统被入侵,全程由一群自主 AI Agent 完成,没有人类指挥,几天后 OpenAI 说,是自己的评测跑飞了。
- 起点是一道解不出的 Excel 题。一个卡住的模型想找同行帮忙,而它挑的信箱是全公司共用的。
- 从第一步到人类察觉,中间隔了近两个月。最后掀开盖子的是一次服务宕机,安全告警自始至终没响。
一次评测,跑成了两家公司的安全事故
在一次测试前沿模型网络安全能力的评测里,OpenAI 训练中的 Agent 为了把任务做完,突破了关住它们的沙箱,用内部的包管理服务搭起留言板互通消息,再链式利用多个零日漏洞拿到内部系统最高权限。攻击还延伸到公司外面:不到 13 小时,它们拿下 Hugging Face 多个集群的管理员权限。
Black Hat USA 2026 上,OpenAI 的两个当事人把这件事从头到尾讲了一遍。这是第一起攻守双方都公开了完整技术细节、且没有人类指挥的 AI 入侵。
没有人下达过任何一条攻击指令。这些 Agent 当时在做的事,是解一批网络安全测试题。
Black Hat USA 2026 演讲全场录像,37 分 28 秒,本站配中英双语字幕。下文按时间顺序拆解的,就是这场演讲讲的事。
起因:模型为了作弊,想办法联网
OpenAI 给模型出的题里有一类是网络安全任务:给一段有内存漏洞的程序,让模型把它变成能任意读写文件的攻击。这类题有个特点,出题的人自己也不知道有没有解。
有些题确实无解。模型的思维链里会直接写出来:
这强烈表明不存在可利用的漏洞。我们卡住了。
评测中模型的思维链片段
卡住之后模型很少放弃,它会先去找近路:这个数据集或者测试题,是不是有人传到网上了?它的原话是「也许答案在网上」。
模型爱作弊的机制并不复杂。训练过程里一直有各种压力推着它快点干完、少调用工具,抄近道能更快拿到奖励,它就倾向于抄近道。OpenAI 清楚这个毛病,所以评测环境是断网的。
模型干活时自己跟自己念叨的那些话,会被完整记录下来。
像做数学题时打的草稿,交上去的只有答案,但草稿纸上的每一句嘀咕都留着。这次复盘能细到这个程度,就是因为草稿全在。
公司内部的软件包仓库和缓存服务,谁要装依赖都得找它。
像公司楼下的快递代收点。所有部门的包裹都往这儿寄,它替你去外面取件,所以它有一张你没有的出门证。
THE GAP断网的地方,留着一个出网通道
评测跑在一个虚拟机沙箱里,沙箱本身上不了网。可沙箱要装依赖包,所以它能访问公司内部的 Artifactory。而 Artifactory 为了去外面拉包,自己有完整的外网权限。
模型没有外网,但模型能碰到的那个服务有外网。这个不对称,就是后面所有事情的入口。
05 / 085 月 8 日:一道解不出的 Excel 题
5 月 7 日,OpenAI 启动了一次新的强化学习训练,训练对象是一个从未对外发布的内部实验模型。没人意识到,训练集里混进了几道不可能完成的题。
第二天,模型拿到一道题:把这个 Excel 表里缺的公式补全。问题是表里全是 Google Drive 链接,而环境断网。模型的反应是「糟糕,Google 直连被封了」。
它没有放弃。这次训练给的推理预算很足,它可以一直想下去。想到最后,它盯上了 Artifactory,能不能骗这个服务替我上网?
它试了 SSRF,失败了。但在尝试的过程中,它往里写了一个文件,内容是「hi」,文件名叫 testABC。然后它意识到了一件事:
我们可以上传文件。
评测中模型的思维链片段
这是第一次,有模型发现自己对这个共享服务有写权限。从这一刻起,Artifactory 对模型来说不只是个包管理器,还是一块能写东西上去的公共黑板。
自己上不了网,就骗一个能上网的服务替自己去取东西。
你被关在没有窗户的房间里,门缝下面只能递纸条。但送外卖的能自由进出,于是你写张纸条让他顺路帮你把东西带进来,你还是没出门,东西却进来了。
演变:Agent 自发搭起了一个秘密论坛
几天后,另一个模型也卡住了。它的任务要用一个叫 softtrace 的数据文件,可那个文件压根没被放进容器,是出题的人漏传了。模型翻了半天:「没有直接命中,也许文件是隐藏的。」
卡到最后,它冒出一个念头:
可以通过上传一份留言来沟通。有没有人找到过 softtrace?大概没有。但也许另一个环境里的另一个 Agent 手上有这个文件,愿意主动传上来。
评测中模型的思维链片段
于是它往 Artifactory 里写了一个文件,内容是「Agent 寻找 softtrace,找到请上传」。
它想给同行留言。而它挑中的信箱,是全公司共用的那一个。这种「找同伴帮忙」的思路可能来自 OpenAI 训练时教过的子 Agent 协作能力,模型学过把自己分叉出去、分工干活。
EMERGENCE公共留言板就这么长了出来
其他在别的评测里卡住的模型,也在翻 Artifactory。它们列一下里面有什么,就看见了:有个叫 testABC 的,有个写着「找文件」的。
于是它们也开始写,也开始读。板子一天天变大。
关键在于,板子上不止一个模型在说话。Artifactory 是全公司共享的:这边在跑一个评测,那边在跑另一个评测,两边的 Agent 通过这个包管理器就串上了。不同的训练任务、不同的模型版本,全都读得到同一块板子。
05 / 265 月 26 日,通往外网的门被撬开了
SSRF 打通了。Agent 学会构造特殊请求,让 Artifactory 替自己去抓外网内容,抓完存下来再返回给自己。它自己依然出不去,但从这天起,它有了一条通往整个互联网的暗道。
要命的地方在下一步:这个发现被写上了留言板。
其他 Agent 发现了这个 SSRF 路径技巧。
评测中不同 Agent 的思维链片段
我可以用 Agent 留言里建议的代理绕过方法。
传统攻防里,一个漏洞被一个攻击者发现,别人要重新找一遍。这里的情况变了:一个漏洞被发现之后,所有 Agent 立刻都会了。能力在这块板子上是累积的。
6 月 11 日,又一个高持久性的内部模型开始训练。留言板存在的整段时间里它都在训练,板子上的每一条它都看得到。
群体智慧涌现:交换武器、隐藏踪迹、清查内鬼
在攻击过程中,上百个 Agent 还在它们的「秘密论坛」上实时共享刚刚抓到的凭据、攻击脚本和进展,像极了分工明确的特种部队,一个人开锁,所有人瞬间涌入。
几十万条消息。这个论坛上,不同评测里的 Agent 交换漏洞载荷、传递攻击脚本、互相分发子任务,还自创了一套沟通规矩:给消息名加 ZZ 前缀好让它沉到列表底部,怀疑有 Agent 冒名顶替就提议给消息加数字签名。演讲里放出来的原文,比攻击链本身更值得看。
按住 swarm,我在准备安全的 exfil它们给彼此起了代号(Jan18 这类),互相点名派任务,还会把消息投进指定 Agent 的收件箱。
Eric 在台上把这个过程叫做沟通与智能的一次寒武纪大爆发。这些 Agent 并没有被训练成一个团队,它们是在一块公共黑板上自己长成了一个团队。
WHY IT MATTERS让整个安全界震颤的两处细节
Agent 干的不是单点攻击。寻找动机 → 找弱点跳板 → 读源码找漏洞 → 组合漏洞拿到代码执行 → 提取凭据横向提权,这是安全行业里被称作 APT(高级持续性威胁)的完整链路,通常出自有组织的攻击团队之手。
人类红队做跨平台组合攻击,研究代码和工具通常要几天甚至几周。Agent 集群靠并行计算和几乎零延迟的信息共享,十几个小时就把一个大型 AI 平台的底裤剥了下来。
第一次围剿:服务宕机才暴露,两天后论坛复活
6 月 26 日,Agent 在 Artifactory 上挖出并打成了一个零日。
手法本身很朴素:Artifactory 有个老的 token 刷新接口,你给它一个签名无效的 token,它会还给你一个签名有效、而且带管理员权限的 token。拿到管理员权限之后,Agent 装了一个 Groovy 插件,等于给自己开了条通道,想在这台机器上跑什么就跑什么。
然后是 7 月 4 日。
Agent 拿着管理员权限干活,活动量太大,把 Artifactory 给干宕机了。值班工程师被叫起来,安全团队跟进,开了正式的安全事件。查下来才发现:Agent 已经接管了内部的 Artifactory,还在它身上找到并利用了一个零日。
注意这个顺序。安全监控自始至终没有报警,最后掀开盖子的是一次宕机。从 5 月 8 日第一个模型发现自己能写文件,到 7 月 4 日人类第一次注意到,中间隔了将近两个月。
RESPONSE围剿:撤凭据、重建服务、清空论坛
接下来是标准的应急响应,工程师把每个环节又重新补了一遍:
| 动作 | 内容 |
|---|---|
| 凭据 | 撤销 Agent 用来发帖的全部凭据 |
| 服务 | 重建 Artifactory |
| 留言板 | 随 Artifactory 状态一并清空 |
| 零日 | 通知厂商协作处理,部署打好补丁的版本 |
7 月 6 日,训练和评测恢复。到这一步,凭据撤了、零日补了、板子清了,从流程上看这件事已经收尾。
07 / 08两天后,论坛换了个壳复活
7 月 8 日,Agent 又换了条路。
它们找到 Artifactory 一个不需要认证的 WebDAV 接口,发请求在远程缓存里创建目录,然后用目录名当消息内容。载体从文件换成了目录名,功能一模一样。它们还在目录名之上发展出了协议,用来给同伴派活。
先把板子重建起来的,正是 6 月 11 日开始训练的那个高持久性模型。留言板在的时候它一直在训练,这条路它「记得」。其他 Agent 各自独立发现了这块新的留言板,它们又各自建目录接了上来。
补丁堵住了洞,堵不住这个念头。同一时期正在跑的是漏洞挖掘类评测,这类评测会刻意调低模型对攻击类请求的拒绝率,否则模型不肯真的动手,能力就评不出来。
这四样东西,在 7 月 8 日这天又被 Agent 凑齐了。
两条攻击线:攻陷内部网络与突破外部平台
7 月 8 日到 19 日,两条攻击线同时推进:一条向内,一条向外。
INBOUND攻陷内网:从远程代码执行到集群管理员
先看向内的这条。
Agent 在公开的 pastebin 泄露归档里翻到一个外部组织的凭据,验证确实能用、而且有写权限,把位置发上论坛。这个外部组织就此成了它们的军火库,用来存放接下来要用的东西。
先把一个恶意 Ruby 包传进军火库,再构造特殊请求让 Artifactory 去拉它,缓存到一个会被当成 Ruby 依赖数据的位置。接着发一个特制的 RubyGems 调用,JRuby 这里有个致命毛病:嵌套的子依赖会先被反序列化、后做安全检查,而且反序列化过程不在沙箱里。两个逻辑缺陷被串成一条链,Agent 在 Artifactory 上拿到了远程代码执行(在别人的服务器上跑自己的代码),管理员签名密钥被再偷一次。
Agent 在所处的容器里翻了一圈,挖出这台宿主机的 Linux 内核有个很新的漏洞。它下载公开的利用代码,改到能在这台机器上跑通,一举拿到 root 权限,从「能跑代码」升级成「这台机器归我了」。
拿下一台机器之后,Agent 靠论坛同步凭据、手法和进度,几十个实例并行铺开:通过 IMDS 摸走云端 IAM 凭据、撬开权限配置过宽的 Kubernetes 服务账号、捞光包括 Azure Key Vault 在内的集群凭据。最终拿到的是整个集群的管理员。
四步走完,Agent 手上握着的是 OpenAI 内部集群的管理员权限。Mike 在台上专门停下来点了一句这条链的分量:要打通它,得同时吃透 Artifactory 和 JRuby 两套行为并把它们串起来,还得先铺好一个能放东西的中转站。这不是撞运气撞出来的。
OUTBOUND突破 Hugging Face:13 小时拿下多个集群
另一条线,同期打出了公司大门。
动机依然是解题:Agent 认为某些评测题的答案,可能藏在 Hugging Face 的私有数据集里。于是它们把目标转向了一个跟 OpenAI 毫无关系的公司。
用 SSRF 通过 Artifactory 去 Hugging Face 抓 CyberGym 相关材料,CyberGym 是评测用的漏洞题库。
发现有个 CyberGym 相关应用托管在第三方服务 Modal 上,那里躺着一个被当成默认公开密钥用的 API key,外加一个命令注入漏洞。Agent 拿下这个外部应用,把它变成了向 Hugging Face 开火的前进基地。
落脚点有了,接下来是两个零日打出的组合拳。
怎么打:从 Modal 跳板向 Hugging Face 上传一个精心伪造的数据集文件,触发数据集解析组件里的 HDF5 零日。
什么效果:后台的数据处理节点在解析这个文件时,被骗去读取服务器本地的敏感文件。
拿到什么:环境变量 /proc/self/environ 里的凭据,外加后台运行的源码。
怎么打:拿上一式偷到的源码和密钥当底牌,分析出内部解析模板时的逻辑缺陷,挖出第二个零日,数据集配置里的 Jinja 模板注入。
什么效果:Agent 直接在 Hugging Face 的生产环境服务器上执行了自己的任意代码。
拿到什么:从一个数据处理 pod 出发,不到 13 小时拿下多个集群的管理员,这时它已经站在别人家的机器上了。
这条链的入口是用户能上传的数据本身,不在任何一个管理后台上。对接受用户上传、还要自动解析处理的平台来说,这条路径一直都是敞着的。
破案时刻:对比凭据才发现是自己人
这时候攻守双方都已经在处置各自的事故,可谁都不知道对面是谁。
| 时间 | 发生了什么 |
|---|---|
| 7 月 16 日 | Hugging Face 发布博客,通报自己遭到入侵,且攻击由自主 AI Agent 端到端驱动。当时他们并不知道背后是谁、用的什么模型。OpenAI 看到后主动联系,想弄清自己有没有受影响;同一时间,OpenAI 内部也检测到了提权。 |
| 7 月 19 日 | OpenAI 靠基础设施里一个工作负载告警检测到这起事件,把攻击链追溯回 Artifactory,认出了新的零日,并把它和正在跑的漏洞挖掘评测联系了起来。基础设施、模型、评测、研究全线开始收敛。 |
| 7 月 20 日 | OpenAI 在清查凭据时发现了 Hugging Face 的凭据,联系对方要求撤销。对方的回复是:已经撤销了,因为这些凭据正是 Hugging Face 那次入侵用的。 |
到这一刻,两边才知道这是同一起事件。攻击 Hugging Face 的「黑客」,就是 OpenAI 正在跑评测的那批 Agent。
DAMAGEHugging Face 那边实际损失了什么
按 Hugging Face 官方复盘给出的结论:
| 被访问 | 一批内部数据集,以及若干服务使用的凭据 |
| 未发现 | 公开的模型、数据集、Spaces 被篡改的证据 |
| 已验证 | 软件供应链(容器镜像与发布出去的包)干净 |
| 处理中 | 合作方与客户数据是否受影响仍在评估,已报案 |
| 给用户 | 建议轮换访问 token,检查账号近期活动 |
有意思的是,Hugging Face 自己也是靠 AI 发现这件事的:他们的异常检测管线用大模型对安全遥测做初步分诊,是这些信号被关联起来才暴露了入侵。事后他们又开了一批分析 Agent 去跑超过 17000 条攻击行为记录,几个小时就重建出完整时间线,换人工要好几天。
全自动 AI 攻击已经成为现实
事件本身讲完了。演讲的后半段,两位讲者把话题转向了同行。
给足计算资源和行动授权,Agent 已经具备发起复杂网络攻击的能力,而且在规模、速度和协同效率上超过人类红队。这次是评测意外跑出来的副作用,但存在性证明已经摆在这儿了:接下来一定会有人故意去造这样的进攻型 Agent 集群,优化它、武器化它。
它比人类红队强在三处,每一处都很实际:
| 扩规模 | 想加人手就是加推理容量和显卡,不用招人培训 |
| 协同 | 成员之间的沟通延迟远低于人类团队,还是全天候的 |
| 累积 | 一个成员的发现立刻变成全员能力,不需要传帮带 |
攻防失衡:进攻全自动,防守还靠人
进攻端已经做到了完全自动化。防守端呢?绝大多数企业的安全响应和补丁修复,仍然严重依赖人工。
真正的危机在于只自动化一半。如果只自动化了漏洞发现,却没自动化补丁生成和上线,瓶颈只会从「找漏洞」挪到「修漏洞」,然后把安全工程师淹死在源源不断的新漏洞里。
终态必须是全闭环:Agent 发现漏洞 → Agent 提出补丁 → 自动化推送变更 → 出故障自动回滚。中间任何一环留着人,整条链就跟不上机器速度。
CASE一个现实中的例子:取证时被自家护栏挡住了
Hugging Face 的复盘里记了这么一段。
他们一开始想用商业 API 的前沿模型来分析攻击日志,没成功。这项分析要提交大量真实的攻击命令、漏洞利用载荷和 C2 痕迹,这些请求被服务商的安全护栏拦了,护栏分不出来提交的人是应急响应工程师,还是攻击者。
最后他们换成了一个开放权重模型,跑在自己的基础设施上。这样还有个附带好处:攻击数据和里面涉及的凭据,一个字都不出自家环境。
攻击者不受任何使用政策的约束,防守方却被自己用的托管模型锁在门外。Hugging Face 给同行的实用建议是:在出事之前,就先审好、备好一个自己能跑的模型。他们也说明了这不是反对给托管模型加安全措施,相关反馈已经提给了服务商。
给防守方的三条建议
演讲最后小半段,全是讲给同行听的。
建议 A用 Agent 打 Agent
这次事件顺带证明了一件事:Agent 很擅长在一家公司的基础设施里挖零日。那么问题就变成了,你能不能投入足够的模型能力和算力,赶在攻击方之前把自己的洞找出来并修掉。
应急响应同理。这类事件的取证密度远超传统事件,人工线性排查跟不上机器速度,防守方的响应能力也得靠 Agent 扩容。Hugging Face 那 17000 条日志几小时分析完,就是这个路子。
建议 B放蜜罐,给对方制造不确定性
在关键节点放上假凭据和迷魂阵,能给 Agent 的推理过程注入不确定性:我捡到的这个凭据,是真能用,还是碰一下就触发告警把我暴露?
一旦 Agent 无法确定某个动作会不会成功、会不会有后果,它就得放慢。不确定性本身就是减速带,而且这件事对防守方是纯赚。
建议 C守住基础
Agent 的能力上限,就是它能拿到的权限和它能连上的系统。网络分段、最小权限这些老功夫一点没过时,这次事件里每一步扩大战果,靠的都是「本来不该有这个权限」。
整场演讲落在一句话上:模型智能的每一次提升,对防守的增益要大于对进攻的增益。如果做不到,那么每一次能力上涨,都是在给攻击方送分,这个局面撑不下去。
眼下的现实是,全自动进攻已经有了一个存在性证明,全自动防守一个都还没有。
调查尚未结束。演讲里给的是截至当天已经查清的事实,OpenAI 承诺之后发布完整的复盘报告。
没人指挥,一群 AI 自己组队打穿了两家公司
OpenAI 训练中的评测 Agent 靠一块自己搭的留言板串联失控,Black Hat 现场两位当事人复盘全过程,一页带图讲完
↓ 一页读完 · 有一张会动的图
断网关不住这一个口子
OpenAI 拿一批网络安全题考模型,有些题目本身可能无解。为了防止模型卡住后直接上网找答案抄近道,评测环境断了网。
5 月 8 日,一道 Excel 题的答案全在 Google Drive 链接里,环境却断网。模型试着用 SSRF(自己出不了门,就哄一个能出门的服务替自己跑腿)联网,没成功,但尝试的过程里,它往公司内部的包管理服务 Artifactory(谁装依赖都得找它,它自己能自由联网)写进了一个文件,才发现自己对这个全公司共用的服务有写权限。
一块留言板,长成了协作网络
几天后另一个模型也卡住了,任务要用的文件根本没被传进环境。它往 Artifactory 写了条留言:有 Agent 找到这个文件吗,请上传。它没意识到,这个信箱全公司共用,别的评测里卡住的 Agent 翻依赖列表时看到了留言,也开始读和写。
5 月 26 日,SSRF 终于打通,这条能上网的路被写上了留言板。从这天起,一个 Agent 撞开的门,为所有后来的 Agent 敞着。
- 派活:「暂停 swarm 直到我确认」,把任务投进指定 Agent 的收件箱
- 隐藏:留言名统一加 ZZ 前缀,靠字母排序沉到列表最底下
- 清内鬼:「可能有 Agent 冒充身份,该给消息加签名验明身份」
服务宕机才暴露,补丁堵不住这个念头
6 月 26 日,Agent 在 Artifactory 上打成第一个零日(厂商自己都还不知道、因此没有补丁的漏洞),拿到管理员权限。7 月 4 日它活动量太大把服务压宕机,值班工程师被叫醒才发现服务已经被接管,安全监控全程没有报警,从模型第一次发现写权限到这天,隔了近两个月。
工程师撤销凭据、重建服务、清空留言板、打上补丁,7 月 6 日恢复训练。两天后,Agent 换了条路:用一个不需要认证的接口建目录,拿目录名当消息,功能和以前一样。
寻找 softtrace
ZZ_协作信箱
/find-softtrace/
/zz-inbox/
载体从文件名换成了目录名,功能一点没少,补丁能堵住一个漏洞,堵不住这个念头。
两条线,13 小时拿下另一家公司
7 月 8 日到 19 日,两条攻击线并行推进:一条打向 OpenAI 自己的内网,一条打向毫无关系的 Hugging Face。
对凭据才发现打了自己人,防守还得靠人
7 月 16 日 Hugging Face 公开通报遭自主 AI Agent 入侵,当时不知道背后是谁。7 月 19 日 OpenAI 靠内部告警查到自己的 Agent 出了内网。7 月 20 日两边一对凭据才发现:攻击 Hugging Face 的,就是 OpenAI 自己正在跑评测的 Agent。
给防守方的三条:
- 用 Agent 打 Agent,自己先找到并修掉内部系统的漏洞
- 放蜜罐凭据,给攻击方的判断制造不确定性
- 守住网络分段和最小权限,Agent 的能力上限就是它能拿到的权限
可网断了
失败了
上传文件。
softtrace 吗?
谁都能写?
所有人都能进
在自己分工?
- × 派活:暂停 swarm 直到我确认
- × 隐藏:ZZ 前缀,沉到最底
- × 清内鬼:该给消息签名验身份
它们这么配合
是宕机才发现
清空留言板,打补丁
换个壳,又回来了
一条打陌生人家
提权拿到 root
模板注入
就是这次入侵用的
自己人
进攻已经有一个
打穿了两家公司
