你以为把 trust_remote_code 设成 False 就万事大吉了?安全研究人员最新发现,即使不信任远程代码,恶意模型也能神不知鬼不觉地在你的机器上跑起来。被盯上的,是 AI 圈几乎人人都在用的 Hugging Face Diffusers 库。

Zafran Labs 研究员 Gal Zaban 与 Ido Shani 上周发布分析报告,披露 Diffusers 库中存在三个高危漏洞,统一命名为 FaceHugger。据 pepy.tech 统计,这个用于图像、视频、音频生成的扩散模型库,仅 2026 年 7 月就已被下载超过 810 万次,遍及生产管线、CI/CD 系统和容器镜像。

打开网易新闻 查看精彩图片

安全门,只守了第一道门

Diffusers 提供 DiffusionPipeline API,可从 Hugging Face 仓库本地加载模型。关键是 trust_remote_code 参数——设为 True 允许模型仓库内的自定义 Python 代码在 from_pretrained() 加载时执行;设为 False 或省略,应拦截未经验证的代码。漏洞恰恰绕过了这扇门。

“所有远程代码执行变体的根因都一样,”Zafran 解释,“trust 检查只在第一阶段发生。只要让加载器在门没看到的地方遇上自定义代码,trust_remote_code 机制就被绕过了。”每个漏洞变体都来自“检查时-使用时”的时间差(TOCTOU)。

为什么检查和安全执行不在同一趟里?

模型下载被设计成两次先后独立、非原子的 HTTP 请求,而不是单次原子操作。trust_remote_code 的安全检查只针对第一次请求,攻击者可以在第二次请求时悄悄替换内容,把模型文件之外的管道代码变成恶意载荷。

后果很直接:任何用户只要调用 DiffusionPipeline.from_pretrained 并加载自定义管道,就可能中招。你只是例行跑一下模型,攻击者已经拿到了初始访问路径。

三个漏洞,一个套路

报告没有逐一列出 CVE 编号,但指出都源于同一类 TOCTOU 缺陷。攻击者构造一个仓库,初次拉取时展示合规文件,随后在第二趟请求里投递可执行代码。Diffusers 在未觉察的情况下照单全收。

“AI 仓库拉下来的文件总被当成被动数据,”研究员写道,“但配置文件、加载器、自定义管道代码可能悄悄变成可执行代码,把一次普通的模型加载变成初始攻击入口。”

修了,但谁还在旧版本上?

漏洞已在 2026 年 5 月初发布的 Diffusers 0.38.0 中修复。凡是还在用低于该版本、且涉及自定义管道 from_pretrained 的用户,都仍在风险敞口内。如果无法立即升级,官方也给出了临时缓解方案,不过核心建议仍然是尽快迁移到 0.38.0 或更新版本。

一次模型加载,就可能把 AI 供应链的信任根基掏空——这远比“下一个包之前先看一眼”要隐蔽得多。