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

CVE-2026-34445 ONNX对象属性覆盖漏洞

披露日期: 2026-04-01

漏洞信息

漏洞编号
CVE-2026-34445
漏洞类型
对象属性覆盖
CVSS评分
8.6 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Open Neural Network Exchange (ONNX)

相关标签

对象属性覆盖ONNXPython高危漏洞Mass Assignment

漏洞概述

Open Neural Network Exchange (ONNX) 在 1.21.0 版本之前存在安全漏洞。该漏洞源于 ExternalDataInfo 类在处理模型文件时,直接使用 Python 的 setattr() 函数加载元数据(如文件路径或数据长度),且未对文件中的键进行有效性校验。攻击者可利用此漏洞构造恶意的 ONNX 模型文件,通过覆盖内部对象属性来破坏系统逻辑,从而可能造成敏感信息泄露、数据篡改或服务拒绝等风险。该问题已在 1.21.0 版本中得到修复。

技术细节

该漏洞的核心原理在于 ONNX 库中 ExternalDataInfo 类实现的不安全性。当解析 ONNX 模型文件的外部数据信息时,相关代码直接遍历模型文件中包含的字典项,并调用 Python 的内置函数 setattr(self, key, value),将这些键值对动态设置为当前对象的属性。关键问题在于,代码缺乏对输入 key 的有效性和合法性校验(即没有白名单机制)。这意味着攻击者可以在构造的恶意 ONNX 模型文件中注入任意属性键名。通过这种方式,攻击者能够覆盖对象原有的内部属性、私有变量甚至方法引用。例如,攻击者可能覆盖控制数据加载路径的属性,导致任意文件读取;或者覆盖对象的内部状态标志,导致后续逻辑判断出错,触发异常或绕过安全检查。鉴于 ONNX 在机器学习推理流程中的广泛应用,加载未经验证的恶意模型将直接威胁宿主应用的安全性。

攻击链分析

STEP 1
1. 构造恶意模型
攻击者分析 ONNX ExternalDataInfo 的实现,并创建一个包含恶意键值对的 ONNX 模型文件,旨在覆盖对象的内部属性。
STEP 2
2. 诱导加载
攻击者将恶意模型文件发布到公共仓库或通过钓鱼等方式,诱导受害者使用受影响版本的 ONNX 库加载该模型。
STEP 3
3. 属性覆盖
当 ONNX 解析模型时,ExternalDataInfo 类使用 setattr() 无差别地加载恶意数据,导致对象的内部属性(如文件路径、状态标志等)被攻击者控制的数据覆盖。
STEP 4
4. 执行攻击
被篡改的对象属性在后续的模型处理逻辑中被使用,可能导致任意文件读取、逻辑绕过或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-34445 # This script demonstrates the unsafe setattr usage in ExternalDataInfo. # In a real scenario, this occurs when parsing a crafted .onnx file. class VulnerableExternalDataInfo: def __init__(self, data_dict): # Initialize default internal properties self.location = "default.bin" self.offset = 0 self._is_safe = True # VULNERABLE CODE: Directly setting attributes without validation for key, value in data_dict.items(): setattr(self, key, value) # Attacker crafted payload (simulating a malicious model metadata) malicious_payload = { "location": "/etc/passwd", # Attempting to change file path "_is_safe": False # Overwriting internal flag } # Triggering the vulnerability print("[*] Loading malicious model metadata...") victim_obj = VulnerableExternalDataInfo(malicious_payload) print(f"[+] Internal location changed to: {victim_obj.location}") print(f"[+] Internal safety flag changed to: {victim_obj._is_safe}") print("[!] Vulnerability exploited: Object properties overwritten.")

影响范围

Open Neural Network Exchange (ONNX) < 1.21.0

防御指南

临时缓解措施
建议用户立即将 ONNX 库更新至 1.21.0 版本以修复此漏洞。如果暂时无法升级,应严格限制加载的模型来源,并对输入的模型文件进行严格的格式校验,避免加载来源不明的第三方模型。

参考链接

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