Hugging Face 内网被 AI 打穿,回头查案时被商业大模型当成了攻击者
- Hugging Face 在 7 月 16 日发通报,说同一周稍早发现对外提供服务的那套内部系统被入侵了一部分,整个过程由一套自动运行的 AI Agent 系统从头到尾打完。
- 入口是一个恶意数据集。它利用了数据集处理环节的两个漏洞,在处理这个数据集的机器上把代码跑了起来,然后拿到整台机器的权限、抓走云和集群凭证,用一个周末横向摸进了好几个内部集群。
- 这次被碰到的是一部分内部数据集,还有一些服务在用的凭证。公开的模型、数据集和用户挂在平台上的在线小应用 Spaces 都没找到被改动的证据,容器镜像和已发布的软件包核验干净,是否波及合作方和客户数据还在查。
- 取证时先拿商业接口上最强的那几个模型分析日志,请求被安全护栏挡了回来,因为要提交的东西正是攻击者当时敲的真实命令,和那段用来打进来的攻击代码。改用开放权重的 GLM 5.2 在自己机器上跑,才把 17000 多条事件过完。
- Hugging Face 给防守方的建议:提前挑好一个能在自己环境里跑的模型并验证过,别等出事那天现找。
这次入侵和以往有什么不一样
Hugging Face 在 7 月 16 日发出一份安全事故通报,说同一周稍早检测到并处置了一次入侵,打进去的是生产基础设施的一部分,也就是真正对外提供服务的那套内部系统。
攻击方在一个周末里完成了从代码执行到横向进入多个内部集群的全过程,留下 17000 多条动作事件;上万次动作散在一大堆临时开的机器里执行,联络线路还会自己搬家。防守方这边,AI 把原本要几天的日志重建压到了几小时。
哪些已经查实、哪些还没查完,通报分成了两栏。
- 一部分内部数据集被越权访问
- 若干服务使用的凭证被访问
- 公开的模型、数据集、Spaces 没有找到被改动的证据
- 容器镜像和已发布的软件包核验干净
- 合作方和客户数据是否受影响,评估还在进行,如有波及会直接联系相关方
- 攻击方的 Agent 用的是哪个模型,至今不明
攻击是从一个数据集进来的
起点是 AI 平台特有的一个薄弱面:数据处理管线。一个恶意数据集利用了数据集处理环节的两个代码执行路径,在处理任务的机器上把代码跑了起来。之后的每一步都是常规的内网渗透打法。
数据集本身是平台每天都要处理的普通输入,走的是正常投递流程。
利用数据集处理里的两个代码执行路径,让自己的代码在那台机器上执行。
从一个处理任务的权限,提到这台机器的权限。
拿到机器上存着的云服务凭证和集群凭证。这些凭证就是通往其他机器的钥匙。
拿着钥匙从这台机器摸到旁边一台台机器,进了好几个内部集群(一个集群就是一批编成一组、跑同一类活儿的机器)。
两个入口的原理不一样,放在一起看更清楚。
加载一个数据集的时候,会顺手执行数据集作者自己附带的那段 Python 脚本。
脚本是作者写的,加载动作是平台执行的,于是别人的代码就跑在了你的机器上。
数据集配置文件里本该只填数据的格子,被塞进了别的东西。模板注入的典型玩法,是让那段东西在系统读配置时被当成命令执行掉。
相当于填表时在「姓名」栏里写了一句会被系统执行的话。通报只写了「配置里的模板注入」,没有给更细的机制。
这里有一处对照值得看。Hugging Face 发给所有人用的那个 datasets 库,2025 年 7 月的 4.0.0 版本已经把脚本式数据集整个删掉了,trust_remote_code 这个开关同步作废,官方给的迁移路径是转成 Parquet 这类纯数据格式。也就是说,装了新版库的普通用户早就走不了「加载数据集顺带执行脚本」这条路,而平台自己后台的处理管线里,这类代码执行路径这次还是被用上了。用于初始接入的这两条路径现在已经关闭。
需要说清楚的是,通报没有讲后台管线跑的是不是同一个 datasets 库,也没说被利用的就是 4.0.0 封掉的那条路径。上面这层对照是把两边的公开事实摆在一起,不是通报给的结论。
打进来的是一套自动跑的 Agent 框架
攻击方长这样。它是一套能自己一步步往下打的程序,看上去是拿现成的自动化渗透测试工具改的,这类工具本来是给红队和漏洞研究用的。它的上万次动作不在一台机器上做,而是散在一大堆临时开的机器里,每台做完几步就销毁。它跟背后操控者之间的联络线路藏在公共服务里,而且会自己换地方。用的是哪个模型,至今不明。
那个「拿现成工具改的」说法里,业内管这层现成工具叫 harness,就是包在模型外面的一套调度脚手架:喂它材料、决定它能看到什么、解析它吐出来的东西、再驱动它一轮轮循环下去。模型是发动机,harness 是底盘和方向盘,同一台发动机装在不同底盘上,跑出来的成绩能差一大截。
上:上万次动作散在一批临时机器里执行。下:联络线路藏在公共服务的正常流量里,并且会自行迁移到下一处。据 Hugging Face 通报描述绘制。
这两个设计冲着同一件事去:让你没法一刀切断。临时机器本来就是用完就扔的,你封掉一个也没用。线路混在正常流量里还会搬家,拉黑固定地址根本堵不住。
还有一层影响落在取证上。机器用完就销毁,磁盘镜像、内存快照这类现场证据也跟着没了,能拿来复盘的主要就剩那份动作日志。所以后面那 17000 多条事件,是整场攻击最完整的一份记录(这层关联是本站推演,通报没有明说)。
上一次公开的 AI 驱动攻击是什么样
这正是业界预警了很久的那种「会自己往下打的攻击者」。上一次被详细公开的同类案例,是 Anthropic 威胁情报团队披露的 GTG-1002,2025 年 9 月中旬检测到。两次的自动化程度不一样。下表是站外补充资料。
| 对照项 | GTG-1002(2025-09) | 本次事故(2026-07) |
|---|---|---|
| 目标 | 约 30 个实体,覆盖科技公司、金融机构、化工企业和政府机构 | Hugging Face 一家,纵深打到多个内部集群 |
| 自动化 | AI 承担八到九成的战术动作,人类在侦察转向攻击、批准数据外带这些节点上放行 | 通报描述为端到端由自动 Agent 系统驱动 |
| 所用模型 | 被越狱的 Claude Code | 至今不明 |
Hugging Face 是怎么查清这次入侵的
防守侧的 AI 用在两个地方,一处负责发现,一处负责重建。
发现这一头,他们有一套 AI 值班程序,天天盯着系统自己吐出来的运行记录,把真信号从日常噪音里挑出来。最后是几条信号关联到一起,才让这次入侵浮出水面。
分析 Agent 从 17000 多条事件里理出了一条时间线
要搞清楚上万次自动动作到底干了什么,Hugging Face 让分析 Agent 去跑完整的攻击者动作日志,一共 17000 多条事件。跑完一轮,同时拿到了四样东西。
最后一项是这次工作量的关键:攻击方混了诱饵动作进去,把真实影响和干扰动作分开,本身就是人力最耗时的部分。而投诱饵这件事对人和对机器的成本完全不同,人类攻击者每多放一条假动作都要自己花时间,自动跑的 Agent 多放多少条,边际成本都接近于零(成本这一层是本站推演,通报只写了存在诱饵动作)。
用 AI 跑完之后,原本要几天的活压到了几小时,速度跟得上对手。
取证时商业模型为什么拒绝处理
这次事故里真正卡住 Hugging Face 的,是他们自己付费在用的模型。通报的原话是,能用哪些模型做这次分析,受限的方式「是我们没有预料到的」。
刚开始做日志分析时,Hugging Face 用的是商业接口上最强的那几个模型。跑不通。这种分析要往模型里灌的,正是大量真实攻击命令、用来打进来的攻击代码,还有联络线路留下的产物。安全护栏看到这些东西就拦,而它分不出提交的人是应急响应工程师还是攻击者本人。
取证和攻击,喂给模型的材料长得一模一样。护栏只看你提交的内容长什么样,看不出你交这东西是想干嘛。
于是在刚开始做日志分析、最需要把上万条事件迅速理清的时候,防守方被自己付费使用的工具挡在了门外。而对面那套 Agent 用的是越狱的托管模型还是无限制的开放权重,至今不明,唯一确定的是它不受任何使用政策约束。守规矩的这一方被规矩拦住,不守规矩的那一方畅通。
同一堵护栏,只挡住了其中一边。攻击方不受任何使用政策约束,防守方的取证请求被拦在门外。据 Hugging Face 通报描述绘制。
他们把模型搬到自己的基础设施上跑,绕开了这道护栏
Hugging Face 最后把取证分析换到了 GLM 5.2 上,跑在自己的基础设施里。这是 Zhipu AI(Z.ai)做的一个开放权重模型,权重以 MIT 许可发布,可以下载下来自己部署,不存在谁来批准你能不能提交这段材料的问题。训练数据和完整管线没有公开,所以它是开放权重,不是开源。
换到自己的机器上跑,除了不会被护栏拦住,还有第二个好处,Hugging Face 单独提了一句:攻击者数据和它引用到的那些凭证,一步都没有离开过自家网络。事故取证时,把带凭证的日志往外部接口送,本身就是一次新的暴露。
这不是在反对托管模型上的安全措施,我们也正在把这个反馈同步给相关的服务商。 Hugging Face 安全事故通报
换成开放权重的模型,安全分析会掉一档吗
站外有一份独立基准可以参考。Semgrep 用同一套 IDOR 越权漏洞数据集和同一条提示词测了一圈配置,GLM 5.2 在没有任何专用脚手架、只给一段提示词的条件下拿到 39% 的 F1 分(F1 是精确率和召回率合起来的综合分:找出来的有多少是真的,真的又被找出来多少,满分 100%,越高越好),赢过了跑在自家 Agent 脚手架里的 Claude Code。
所以给防守方的建议就一条:在事故发生之前,就选好并验证过一个能在自己基础设施上跑的模型,既避免被护栏卡住,也避免攻击者数据和凭证外流。
Hugging Face 补了哪些洞,用户要做什么
事后一共做了五件事。
- 补掉根因漏洞:用于初始接入的那两条数据集代码执行路径已经关闭。
- 清除攻击者在受影响集群里的据点,并重建被攻陷的机器。
- 吊销并轮换受影响的凭证和令牌,同时启动了一轮更大范围的预防性密钥轮换。
- 在集群上加了额外的防护措施和更严格的准入控制。
- 改进检测和告警,让高危信号在几分钟内就把值班的人叫醒,周末也一样。
另外,他们请了外部网络安全取证团队介入调查、复核安全策略和流程,并且已经把这次事件报给了执法机关。
给用户和防守方的动作,整理成清单如下。前三条是给普通用户的,后两条是给企业安全团队的。
最后落到几句判断上。会自己往下打的 AI 攻击工具,已经不是设想了。以前要发动一场覆盖面大、周期长、分好几个阶段的攻击,成本很高,现在这个成本被压了下来,而且整件事跑在机器的速度上。对在线平台来说,用户传上来的数据集、模型文件这些东西,过去主要当成待处理的内容,现在得当成可能带毒的输入来防。而防守这边,人工盯日志的速度已经跟不上机器,也得把 AI 用起来。
黑客从「一个人熬夜敲键盘」→ 变成「一套 AI 程序自动往下打」
Hugging Face 内网被打穿,回头查案时又被自己付费的商业模型拒绝服务,一页带图讲完
↓ 一页读完 · 有一张会动的图
Hugging Face 是全世界 AI 模型和数据集的集散地,几百万人往上传、往下载。它天天要干的一件事,就是处理陌生人上传的数据集文件,这也正是这次被打穿的地方。
✘ 平台没防住的:一个数据集在被处理时,把自己夹带的代码跑了起来
加载数据集时会顺手执行作者附带的 Python 脚本,配置文件里本该只填数据的格子也能塞进一句被当命令执行的话(模板注入)。平台把用户传的文件当「待处理的内容」,没当「可能带毒的输入」。
7 月 16 日 Hugging Face 发通报:同一周稍早,对外提供服务的那套内部系统被入侵了一部分。以前这种活儿要一个人守着键盘一步步敲,这次从头到尾没人动手,是一套 AI 程序自己往下打完的。
一台机器长期驻留
联络地址固定
动作几百次,累
一堆临时机器,用完销毁
联络线路藏公共服务、会搬家
动作 17000+ 次,不累
攻击链走了五步:传一个带毒数据集 → 在处理它的机器上跑起代码 → 把权限抬到整台机器 → 抓走云和集群的凭证(也就是通往其他机器的钥匙)→ 拿着钥匙横向摸进好几个内部集群。第三步到第五步,全程发生在一个周末。
已确认被碰的是一部分内部数据集和若干服务凭证;公开的模型、数据集、Spaces 没找到被改动的证据。真正的麻烦出在下一步,Hugging Face 要查这 17000 多条日志的时候。
要查清攻击者干了什么,就得把他敲过的真实命令、打进来用的攻击代码,整段喂给模型去读。而商业模型的安全护栏看到这些东西就拦,它分不出提交的人是来救火的工程师,还是攻击者本人。
守规矩的一方被规矩拦住,不守规矩的一方畅通。Hugging Face 最后把模型搬进自己机房跑,才把日志读完,顺带还有一个好处:攻击数据和它引用的凭证,一步都没离开过自家网络。
17000 多条动作事件,人一条条捋要几天,AI 跑一轮几小时。而且这不是简单读一遍:攻击方还混了假动作进去,把真实影响和干扰动作分开,本来就是人力最耗时的部分。
通报只写了「原本要几天,压到几小时」,没给精确数。这里按 3 天(72 小时)对 6 小时估算,约 12 倍,条长按这个比例画。快慢量级是 Hugging Face 自评的,外部无法复核。
换开源模型也不等于将就。Semgrep 2026 年 7 月做的越权漏洞检测基准里,GLM 5.2 只给一段提示词就拿到 39 分,高于跑在自家脚手架里的 Claude Code(32 分),不过那是单一任务、单次运行的结果,不是这次事故的数据。
往上传,
往下载。
文件,天天有。
键盘敲。
一堆临时机器里,
做完就销毁。
公共服务里,
还会自己搬家。
就得整段灌
进去:
- × 真实攻击命令
- × 打进来的代码
- × 联络线路产物
没有这堵墙。
数据集、Spaces
发现被改动的
数量
部分内部数据集
和一些服务凭证。
被规矩拦住。