深度 · 小互解读

Hugging Face 内网被 AI 打穿,回头查案时被商业大模型当成了攻击者

入侵横跨一个周末、留下 17000 多条动作日志,最后靠自建环境里的开放权重模型 GLM 5.2 才分析完。
一分钟速览
  • Hugging Face 在 7 月 16 日发通报,说同一周稍早发现对外提供服务的那套内部系统被入侵了一部分,整个过程由一套自动运行的 AI Agent 系统从头到尾打完。
  • 入口是一个恶意数据集。它利用了数据集处理环节的两个漏洞,在处理这个数据集的机器上把代码跑了起来,然后拿到整台机器的权限、抓走云和集群凭证,用一个周末横向摸进了好几个内部集群。
  • 这次被碰到的是一部分内部数据集,还有一些服务在用的凭证。公开的模型、数据集和用户挂在平台上的在线小应用 Spaces 都没找到被改动的证据,容器镜像和已发布的软件包核验干净,是否波及合作方和客户数据还在查。
  • 取证时先拿商业接口上最强的那几个模型分析日志,请求被安全护栏挡了回来,因为要提交的东西正是攻击者当时敲的真实命令,和那段用来打进来的攻击代码。改用开放权重的 GLM 5.2 在自己机器上跑,才把 17000 多条事件过完。
  • Hugging Face 给防守方的建议:提前挑好一个能在自己环境里跑的模型并验证过,别等出事那天现找。
这份通报由当事方 Hugging Face 自己发布,影响范围是它自己评的,而且评估还没做完。文末标注了哪些内容来自站外补充资料。
事故通报

这次入侵和以往有什么不一样

Hugging Face 在 7 月 16 日发出一份安全事故通报,说同一周稍早检测到并处置了一次入侵,打进去的是生产基础设施的一部分,也就是真正对外提供服务的那套内部系统。

这次跟以前所有的事故都不一样,不一样在打进来的是谁:整条链路是一套能自己往下打的 AI Agent 系统从头跑到尾的。而 Hugging Face 反过来也是靠 AI 把它挖出来、拆解清楚的。

攻击方在一个周末里完成了从代码执行到横向进入多个内部集群的全过程,留下 17000 多条动作事件;上万次动作散在一大堆临时开的机器里执行,联络线路还会自己搬家。防守方这边,AI 把原本要几天的日志重建压到了几小时

哪些已经查实、哪些还没查完,通报分成了两栏。

已确认
  • 一部分内部数据集被越权访问
  • 若干服务使用的凭证被访问
  • 公开的模型、数据集、Spaces 没有找到被改动的证据
  • 容器镜像和已发布的软件包核验干净
尚未结论
  • 合作方和客户数据是否受影响,评估还在进行,如有波及会直接联系相关方
  • 攻击方的 Agent 用的是哪个模型,至今不明
入口

攻击是从一个数据集进来的

起点是 AI 平台特有的一个薄弱面:数据处理管线。一个恶意数据集利用了数据集处理环节的两个代码执行路径,在处理任务的机器上把代码跑了起来。之后的每一步都是常规的内网渗透打法。

攻击链
1
上传一个带毒的数据集

数据集本身是平台每天都要处理的普通输入,走的是正常投递流程。

2
在处理这个数据集的机器上跑起代码

利用数据集处理里的两个代码执行路径,让自己的代码在那台机器上执行。

3
把权限抬到整台机器

从一个处理任务的权限,提到这台机器的权限。

4
收割云和集群凭证

拿到机器上存着的云服务凭证和集群凭证。这些凭证就是通往其他机器的钥匙。

5
横向摸进多个内部集群

拿着钥匙从这台机器摸到旁边一台台机器,进了好几个内部集群(一个集群就是一批编成一组、跑同一类活儿的机器)。

第 3 步到第 5 步,全程发生在一个周末

两个入口的原理不一样,放在一起看更清楚。

入口 A · 远程代码加载器

加载一个数据集的时候,会顺手执行数据集作者自己附带的那段 Python 脚本。

脚本是作者写的,加载动作是平台执行的,于是别人的代码就跑在了你的机器上。

入口 B · 配置里的模板注入

数据集配置文件里本该只填数据的格子,被塞进了别的东西。模板注入的典型玩法,是让那段东西在系统读配置时被当成命令执行掉。

相当于填表时在「姓名」栏里写了一句会被系统执行的话。通报只写了「配置里的模板注入」,没有给更细的机制。

这里有一处对照值得看。Hugging Face 发给所有人用的那个 datasets 库,2025 年 7 月的 4.0.0 版本已经把脚本式数据集整个删掉了,trust_remote_code 这个开关同步作废,官方给的迁移路径是转成 Parquet 这类纯数据格式。也就是说,装了新版库的普通用户早就走不了「加载数据集顺带执行脚本」这条路,而平台自己后台的处理管线里,这类代码执行路径这次还是被用上了。用于初始接入的这两条路径现在已经关闭。

需要说清楚的是,通报没有讲后台管线跑的是不是同一个 datasets 库,也没说被利用的就是 4.0.0 封掉的那条路径。上面这层对照是把两边的公开事实摆在一起,不是通报给的结论。

攻击方

打进来的是一套自动跑的 Agent 框架

攻击方长这样。它是一套能自己一步步往下打的程序,看上去是拿现成的自动化渗透测试工具改的,这类工具本来是给红队和漏洞研究用的。它的上万次动作不在一台机器上做,而是散在一大堆临时开的机器里,每台做完几步就销毁。它跟背后操控者之间的联络线路藏在公共服务里,而且会自己换地方。用的是哪个模型,至今不明。

那个「拿现成工具改的」说法里,业内管这层现成工具叫 harness,就是包在模型外面的一套调度脚手架:喂它材料、决定它能看到什么、解析它吐出来的东西、再驱动它一轮轮循环下去。模型是发动机,harness 是底盘和方向盘,同一台发动机装在不同底盘上,跑出来的成绩能差一大截。

上万次动作,散在临时开的机器里 每台只活很短一段时间,做完自己那几步就销毁 联络线路藏在公共服务里,会自己搬家 公共服务 1 公共服务 2 公共服务 3 下一处随时可以换成别的公共服务

上:上万次动作散在一批临时机器里执行。下:联络线路藏在公共服务的正常流量里,并且会自行迁移到下一处。据 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 多条事件。跑完一轮,同时拿到了四样东西。

17000+ 条事件
分析 Agent
时间线
入侵痕迹
被碰过的凭证
剔除诱饵动作

最后一项是这次工作量的关键:攻击方混了诱饵动作进去,把真实影响和干扰动作分开,本身就是人力最耗时的部分。而投诱饵这件事对人和对机器的成本完全不同,人类攻击者每多放一条假动作都要自己花时间,自动跑的 Agent 多放多少条,边际成本都接近于零(成本这一层是本站推演,通报只写了存在诱饵动作)。

用 AI 跑完之后,原本要几天的活压到了几小时,速度跟得上对手。

不对称

取证时商业模型为什么拒绝处理

这次事故里真正卡住 Hugging Face 的,是他们自己付费在用的模型。通报的原话是,能用哪些模型做这次分析,受限的方式「是我们没有预料到的」。

刚开始做日志分析时,Hugging Face 用的是商业接口上最强的那几个模型。跑不通。这种分析要往模型里灌的,正是大量真实攻击命令、用来打进来的攻击代码,还有联络线路留下的产物。安全护栏看到这些东西就拦,而它分不出提交的人是应急响应工程师还是攻击者本人。

核心矛盾

取证和攻击,喂给模型的材料长得一模一样。护栏只看你提交的内容长什么样,看不出你交这东西是想干嘛。

于是在刚开始做日志分析、最需要把上万条事件迅速理清的时候,防守方被自己付费使用的工具挡在了门外。而对面那套 Agent 用的是越狱的托管模型还是无限制的开放权重,至今不明,唯一确定的是它不受任何使用政策约束。守规矩的这一方被规矩拦住,不守规矩的那一方畅通。

商业模型的安全护栏 攻击方 自动 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。

GPT 5.5 + Semgrep 专用脚手架
61%
Opus 4.8 + Semgrep 专用脚手架
53%
GLM 5.2,只给一段提示词
39%
Claude Code + 自家 Agent SDK
32%
GPT 5.5 + Codex
20%

IDOR 越权漏洞检测的 F1 分,来自 Semgrep 2026 年 7 月的基准测试,不是本次事故的数据。同一个 GPT 5.5,装进 Semgrep 的专用脚手架是 61%,走 Codex 是 20%,这正好印证了前面说的「底盘比发动机更影响成绩」。Semgrep 自己也提醒这是单一任务、单一数据集、单次运行的结果,并在事后另做了一轮复查,结论是这些模型确实在做推理而非套模式,但召回率普遍偏低。

所以给防守方的建议就一条:在事故发生之前,就选好并验证过一个能在自己基础设施上跑的模型,既避免被护栏卡住,也避免攻击者数据和凭证外流。

处置与行动

Hugging Face 补了哪些洞,用户要做什么

事后一共做了五件事。

  • 补掉根因漏洞:用于初始接入的那两条数据集代码执行路径已经关闭。
  • 清除攻击者在受影响集群里的据点,并重建被攻陷的机器。
  • 吊销并轮换受影响的凭证和令牌,同时启动了一轮更大范围的预防性密钥轮换。
  • 在集群上加了额外的防护措施和更严格的准入控制。
  • 改进检测和告警,让高危信号在几分钟内就把值班的人叫醒,周末也一样。

另外,他们请了外部网络安全取证团队介入调查、复核安全策略和流程,并且已经把这次事件报给了执法机关。

给用户和防守方的动作,整理成清单如下。前三条是给普通用户的,后两条是给企业安全团队的。

✅ Hugging Face 事故后的行动清单

最后落到几句判断上。会自己往下打的 AI 攻击工具,已经不是设想了。以前要发动一场覆盖面大、周期长、分好几个阶段的攻击,成本很高,现在这个成本被压了下来,而且整件事跑在机器的速度上。对在线平台来说,用户传上来的数据集、模型文件这些东西,过去主要当成待处理的内容,现在得当成可能带毒的输入来防。而防守这边,人工盯日志的速度已经跟不上机器,也得把 AI 用起来。

来源
Security incident disclosure — July 2026Hugging Face 官方博客·原文·2026-07-16
本站说明
全文插图均由本站根据通报文字描述绘制,原通报没有配图。以下内容不来自原通报,是另查的背景资料:datasets 4.0.0 移除脚本加载的时间与版本、GTG-1002 对照表、GLM 5.2 的出品方与许可、Semgrep 基准条形图,以及 harness 的定义(引自 Semgrep 那篇文章)。Semgrep 正文给 Claude Code 记 32%,同文表格按底层模型拆成两行,Opus 4.6 为 37%、Opus 4.8/4.7 为 28%,本站取其正文口径。以下两处是本站推演,正文中已各自标注:诱饵动作对人和对机器的成本差异;临时机器销毁导致可取证材料主要剩下动作日志。另外,正文拿「公开的库早已封掉脚本加载」和「后台管线这次仍被利用」做的那处对照,是本站把两边的公开事实摆在一起。通报没有说后台跑的是同一个库,也没说是同一条路径。