CVE-2026-44827 允许攻击者在加载 Hugging Face Diffusers 模型时执行任意代码,即使禁用了 trust_remote_code 标志也是如此。研究人员将该漏洞命名为“FaceHugger”,并将其追溯到该库两阶段模型加载过程中的竞态条件(race condition)。任何从 hub 拉取模型的流水线都可能受到影响。
为什么该漏洞至关重要
Diffusers 驱动着文本生成图像及其他扩散模型。2026 年 7 月,其下载量达到了 810 万次,因此无数的 CI/CD 作业、容器镜像和企业级推理服务都依赖于它。该漏洞绕过了开发者为阻止随模型一起分发的不可信 Python 代码而启用的主要安全机制 (trust_remote_code)。
绕过机制是如何工作的
- 两阶段加载:Diffusers 首先获取模型配置,然后通过第二个请求拉取模型权重及任何相关的代码。
- 竞态条件:检查第一个请求的安全检查并未延伸到第二个请求。
- 有效载荷注入:控制第二个请求的攻击者可以注入恶意代码,随后该库会执行这些代码,从而完全绕过信任门槛。
由于检查仅针对初始请求,禁用 trust_remote_code 会给人一种虚假的安全感。
开发者的紧急应对措施
- 固定 Diffusers 版本:在
requirements.txt或锁定文件中固定版本,以防止意外升级到存在漏洞的版本。 - 避免在生产环境中进行即时模型拉取:将模型下载到受信任的制品库(例如内部 S3 bucket)中,并从中加载。
- 在使用前审计模型仓库:验证模型的代码文件是否与预期的哈希值匹配,或是否来自经过审核的来源。
- 实施网络出站控制:确保构建代理和推理服务器无法访问公共 Hugging Face hub,除非你明确允许。
- 在具有最小权限的隔离容器或沙箱中运行模型加载:以限制异常代码执行的影响。
总结:
FaceHugger 漏洞表明,仅关闭 trust_remote_code 是不够的。在更新 Diffusers 并加强你的模型摄取流水线之前,每一次远程模型拉取都可能成为恶意代码的潜在入口。
