CVE-2026-44827Hugging Face Diffusers 库在 0.38.0 版本之前存在高危漏洞。当从 Hub 加载管道时,攻击者可绕过 `trust_remote_code` 机制。由于代码将默认参数 `None` 解析为文件名 "None.py",攻击者发布的恶意仓库中若包含同名恶意文件,将在受害者调用 `from_pretrained()` 时被自动下载并执行,导致远程代码执行。
该漏洞的核心在于 Hugging Face Diffusers 库中处理自定义管道加载时的逻辑缺陷。在 `pipeline_loading_utils.py` 文件中,`_resolve_custom_pipeline_and_cls` 函数负责解析自定义管道路径,它使用了 Python 的 f-string 语法 `f"{custom_pipeline}.py"` 来拼接文件名。正常情况下,如果用户未指定 `custom_pipeline` 参数,该参数默认为 `None`。此时,f-string 机制将 `None` 对象转换为字面量字符串 "None.py"。关键的安全检查逻辑位于 `DiffusionPipeline.download()` 中,其判断条件为 `if custom_pipeline is not None`。由于参数确实为 `None`,该检查通过,系统认为不需要加载远程代码,从而绕过了 `trust_remote_code=True` 的安全防护。然而,下游的实际加载代码并不关心这个检查结果,直接使用解析出的字符串 "None.py" 去寻找并导入模块。因此,攻击者可以在 Hugging Face Hub 上发布一个特制的模型仓库,其中包含一个名为 `None.py` 的恶意文件。当受害者使用 `DiffusionPipeline.from_pretrained("attacker/repo")` 加载该模型时,系统会静默下载并执行 `None.py` 中的代码,导致攻击者在受害者机器上获得任意代码执行权限。