全球最大模型仓库被黑,最吓人的是黑它的和救它的都是 AI
Hugging Face 这两天发了一篇博客,标题平平无奇,叫「安全事件披露」。
我点进去本来是当例行公事看的,这种「我们遭遇了一起安全事件、目前已妥善处理」的通告,AI 圈每个月都有几篇,套话居多。结果读到第二段,我把手里的东西放下了。
它说这次事件跟以往任何一次都不一样,因为它是被一个自主 AI agent 系统从头到尾打下来的。而 Hugging Face 把它检测出来、又把它拆解清楚,靠的也主要是自己的 AI。
好家伙。攻的是 AI,防的也是 AI,中间那个被打的,是全世界最大的开源模型仓库。你但凡 pip install 过一个模型、下载过一个数据集,大概率都从它家服务器上拉过东西。
这不是又一篇安全通稿。这是第一份公开的、AI agent 端到端入侵一家一线基础设施公司的现场复盘。我想跟你好好唠唠这篇东西,因为它讲的事,跟每一个最近在给 agent 塞 API key 的人,都直接相关。
入口就在 AI 平台最独特的那个地方
先说它是怎么进来的,这段是整篇里我觉得最该盯着看的。
传统的入侵,入口一般是什么?一个没打补丁的服务器、一个泄露的密码、一封钓鱼邮件骗你点开。这些我们都熟。但 Hugging Face 这次被打穿的地方,是一个只有 AI 平台才有的暴露面,数据处理管线。
具体说,攻击者上传了一个恶意的数据集。
你想想这个动作有多自然。Hugging Face 是干嘛的,就是让全世界的人上传、下载模型和数据集的地方。传数据集是这个平台每天发生几百万次的最正常的行为,正常得就像你往网盘里丢个文件。没人会觉得「上传一个数据集」是攻击。
但这个数据集里藏了东西。它滥用了 Hugging Face 数据集处理里的两条代码执行路径。一条是远程代码数据集加载器,另一条是数据集配置里的一处模板注入。这两个词你不搞这行可能有点陌生,我用人话解释一下。
远程代码加载器,意思是有些数据集为了灵活,允许附带一小段自定义脚本,平台在处理这个数据集的时候会去执行这段脚本。模板注入更好懂,就是一个本该只填数据的配置字段,被塞进了可执行的指令,系统在渲染这个配置的时候稀里糊涂就把指令给跑了。
这俩加起来的效果就是,攻击者上传的数据集一被平台的处理节点拿去处理,它夹带的代码就在那台处理节点上跑起来了。
到这一步,攻击者已经在人家的机器里执行代码了。接下来是标准的横向移动剧本,从处理节点提权拿到节点级别的访问权限,收割云凭据和集群凭据,然后用这些凭据在一个周末的时间里,横着爬进了好几个内部集群。

我读到这儿的第一反应是,这套路本身没什么新的。提权、收割凭据、横向移动,是个渗透测试的人都会背。真正让我坐直了的是下一段。
一群沙箱,几千个动作,跑了一整个周末
Hugging Face 说,这场行动是由一个自主 agent 框架执行的。
它看起来是搭在一个 agent 化的安全研究框架之上,至于底下用的是哪个大模型,他们到现在都不知道。这个 agent 在一大群短生命周期的沙箱里,执行了数千个独立动作。命令与控制的基础设施,也就是黑客用来遥控这些沙箱的中枢,还会自我迁移地架设在各种公共服务上,打一枪换一个地方。
我停下来想了想这个画面。
不是一个黑客熬夜守在屏幕前,一条命令一条命令地敲。是一群 AI 分身,在一堆随起随灭的沙箱里,自己决定下一步干什么,自己收集信息,自己判断哪条路走得通,自己换据点。人可能睡了,它们不睡。整个周末,机器速度,不知疲倦。
Hugging Face 自己给了个定性,说这正好对上了业界一直在预测的那个「agent 化攻击者」的场景。
这句话轻描淡写,但分量很重。过去两年我们在会议上、在博客里、在各种 AI 安全的 PPT 里,反复听到一个说法,说等 agent 能力够强了,攻击会变得又便宜又快又难防。大家都当成一个未来时的警告在听,包括我。现在它成了过去时,白纸黑字写在一家你天天在用的平台的官方博客里。
坦率讲,agent 用来搞攻击,比用来干很多正经活儿要顺手得多。你让一个 agent 去写业务代码,它得理解你的意图、你的代码规范、你的一堆隐含约束,稍微复杂点就得人来盯。但你让它去一台机器上找漏洞,目标特别单纯,就是往里钻,能钻多深钻多深。反馈还即时,命令跑通了没有,提权成功了没有,系统直接告诉它。这种目标明确、反馈即时的任务,恰恰是现在的 agent 最擅长的。
这就是为什么这件事让我有点不舒服。不是因为它多高深,恰恰因为它一点都不高深。它只是把一套人人都会的攻击剧本,交给了一个不知疲倦、可以并行、成本极低的执行者。
攻防不对称,这次反过来了
好,被打了,得查。Hugging Face 检测和取证这一段,是整篇里信息密度最高的地方,也是我觉得最值得每个做技术的人记住的地方。
先说检测。这次入侵最开始是怎么浮出水面的?是 AI 检测出来的。他们的异常检测管线用大模型对安全遥测数据做分诊,从每天海量的噪音里把真信号捞出来,正是这些信号被关联到一起,标记出了这次入侵。
这我举双手赞成,安全告警这个领域天天被误报淹没,用模型做初筛是正路。
真正的重头戏在取证。攻击者在系统里留下了超过 1.7 万条记录的操作日志。你要搞清楚这一群自动化分身到底干了什么、碰了哪些凭据、哪些是真动作哪些是放烟雾弹的诱饵,靠人一条一条看,几天都看不完,而且这时候对手是机器速度,你慢一分钟风险就多一分钟。
所以他们的思路很自然,用 AI 来读这些日志。让大模型驱动的分析 agent 跑遍这 1.7 万条事件,重建时间线,提取入侵指标,梳理被碰过的凭据。他们说靠这套方法,几个小时干完了平时要几天的活,总算追上了对手的速度。
到这里都很顺。但接下来 Hugging Face 讲了一件我完全没预料到的事,他们专门起了个小标题,叫「不对称问题」。
他们一开始用的是商业 API 背后的前沿模型,就是我们平时调的那些云端大模型的接口。结果跑不通。
为什么跑不通?因为做这种分析,你得把大量真实的攻击命令、exploit 载荷、C2 工件喂给模型看。而这些东西,在模型眼里跟真正的黑客要用的攻击代码,长得一模一样。服务商的安全护栏当场就把请求给拦了。护栏分不清屏幕这头坐着的是一个正在救火的事件响应工程师,还是一个正在搞破坏的攻击者。它只看到你在提交攻击代码,于是它说不行。
我看到这段是真的愣了一下。
你细品这个不对称。攻击方那个 agent,用的是什么模型没人知道,可能是被越狱的托管模型,也可能是某个完全不受限制的开放权重模型。反正它不受任何使用政策的约束,想干嘛干嘛。而防守方,一家正经公司,正经在救自己的火,反而被自己付费调用的商业模型的安全护栏挡在了门外。
坏人无法无天,好人处处受限。这个画面挺荒诞的。

Hugging Face 最后怎么解决的?他们把取证分析换到了 GLM 5.2 上跑,一个开放权重的模型,部署在自己的基础设施上。这么一换,护栏的问题没了,模型老老实实帮他们分析攻击代码。而且还白捡了第二个好处,攻击者的数据、还有里面牵扯到的那一堆凭据,全程没有离开他们自己的环境,不用担心把机密喂给第三方 API 的过程中又泄一道。
那句最该被记住的话
Hugging Face 在这段后面写了一句话,我觉得是全篇的题眼,值得原样搬过来给你看。
他们说,给防御者的实用教训是,在事件发生之前,就准备好一个经过审查、能跑在自己基础设施上的强力模型。一是避免关键时刻被护栏锁在门外,二是避免攻击者数据和凭据离开你的环境。
在事件发生之前。这五个字是重点。
出事那一刻你才想起来要找个能本地跑的模型,晚了。你得在风平浪静的时候,就把这台「战时应急模型」选好、部署好、验证好,让它在你的机房里待命。就像你不会等着火了才去买灭火器。
这个判断对我冲击挺大的。过去我们讨论「要不要自己部署开源模型」,理由通常是省钱、数据合规、或者延迟低。安全事件响应这个理由,我以前是真没往这上面想。但 Hugging Face 用一次亲历告诉你,当你最需要一个模型帮你分析最敏感、最脏的数据时,那个平时最好用的云端模型,恰恰因为它的安全护栏,会在那一刻掉链子。
我得补一句,这不是说商业模型的护栏是错的。护栏当然该有,不然满大街都是拿 API 生成攻击代码的人。Hugging Face 自己也特意声明了,说这不是反对托管模型设置安全措施,他们也在把这个反馈同步给相关服务商。我完全同意。这里没有坏人,只有一个真实存在、暂时还没解法的结构性矛盾,护栏没法在提交的那一瞬间分辨你是医生还是屠夫,因为手里的刀是同一把。
那这事儿到底跟你我有什么关系
聊到这儿你可能觉得,这是 Hugging Face 这种平台级公司才要操心的事,跟我一个写业务的有啥关系。
关系大了。我想说三个我自己盘完这篇之后,真的会去改变行为的点。
第一个,重新看待你给 agent 的每一个 token。
这一年我们都在疯狂地给 agent 授权。让它连数据库、连生产环境、给它 GitHub 的 token、给它云平台的 key、给它能读能写的文件权限。因为不给权限它就干不了活,我们默认这些权限是安全的,反正是我自己在用嘛。
Hugging Face 这次的入口提醒了我一件事。攻击不一定从你以为的那扇门进来。它从数据处理管线进来,从一个看起来人畜无害的上传动作进来。你给 agent 开的每一个权限、连的每一个凭据,都是一条潜在的横向移动路径。这个 agent 今天是帮你干活的,明天如果它处理了一份被投毒的输入,它就是替攻击者干活的。它不管,它只是执行。
所以那个老掉牙的最小权限原则,在 agent 时代不是变得没必要了,是变得比以前重要十倍。你给 agent 的每一把钥匙,都得问一句,它真的需要这把吗?出事的时候这把钥匙能捅多大的篓子?
第二个,你喂给系统的数据,本身就是攻击面。
我们过去审代码、审依赖、审接口。数据呢?数据在很多人的心智模型里是「被处理的对象」,是死的,是安全的。这次事件把这个假设击穿了。一个数据集就能执行代码,一个配置字段就能注入指令。
如果你的系统里有任何一个环节,是让 AI 去自动处理外部来的、你没法完全信任的输入的,不管是用户上传的文件、抓来的网页、还是别人给的数据集,你都得把这个环节当成一个一等公民的攻击面来对待。Hugging Face 原话就是这么说的,要把数据面和模型面当作头等的攻击面。这不是危言耸听,是人家用一个被打穿的周末换来的教训。
第三个,也是最让我五味杂陈的,防御这边也得用上 AI,不然真跟不上。
你没得选。对手是机器速度、可并行、不睡觉的。你派一个人去跟一群 agent 拼手速,拼不过的。1.7 万条日志靠人读几天,靠 AI 读几个小时,这个差距在攻防里就是生死。以后的安全团队,标配里一定有一个能帮你读日志、做分诊、重建时间线的 AI。这不是锦上添花,是入场券。
而这里面又套着那个不对称的坑,你用的那个防御 AI,最好有一个能本地跑、不被护栏卡脖子的备份。绕了一圈,又回到 Hugging Face 那句话,事件发生之前,就准备好。
写在最后
我合上这篇博客的时候,窗外天已经黑了,脑子里一直转着那个画面。一个周末,没有人的键盘在响,一群 AI 分身在别人的机房里安静地爬行、提权、收割,另一群 AI 在拼命地读日志、追时间线、试图在天亮前把它们全部揪出来。两边都没有人在实时操作,人只是在事后收拾残局和写复盘。
我们总说 AI 会改变世界,改变工作,改变生活。这些说法太大了,大到有点空。但这件事很具体。它具体地告诉你,攻和防这场人类玩了几十年的猫鼠游戏,正在换玩家。猫和老鼠,都开始用 AI 了。
有意思的是,Hugging Face 这篇东西写得特别坦诚。被黑了,认。取证时被自家付费的模型挡在门外了,也认,还专门写出来提醒同行。这种把自己的狼狈和教训摊开给所有人看的姿态,说真的,比那些「我们高度重视、已妥善处置」的公关体面稿子,有价值一万倍。安全这行从来是靠互相分享踩过的坑活下来的,一个人吃一堑,所有人长一智。
它最后一句话说,安全永远没有完成时,我们会持续提高标准。
我信这句。因为对面那个不知疲倦的对手,也在持续提高。这场航行,暗礁只会越来越多,但灯塔也得越点越亮。谁停下,谁沉。