CVE-2026-34445Open 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 在机器学习推理流程中的广泛应用,加载未经验证的恶意模型将直接威胁宿主应用的安全性。