JFrog安全研究团队披露,开源模型检测工具PickleScan的旧版实现中存在3个CVSS评分均为9.3的零日漏洞,编号分别为CVE-2025-10155、CVE-2025-10156与CVE-2025-10157。攻击者可利用这些漏洞绕过扫描检测,使恶意PyTorch模型在加载时执行任意代码,构成供应链攻击风险。
PickleScan是一款用于检测Python pickle序列化文件是否存在可疑导入或函数调用的开源安全工具,目前已被Hugging Face等AI模型平台用于扫描上传的PyTorch模型,其安全性与准确性直接影响整个开源模型生态。
PyTorch在保存模型时大量依赖Python的pickle序列化格式。由于pickle的设计目标是还原任意Python对象,因此在反序列化过程中允许执行任意代码。若加载未经可信验证的模型文件,恶意代码可能窃取敏感数据或植入后门,这一点早已被官方文档与社区研究反复警示。
本次披露的三个漏洞分别存在于文件类型判断、ZIP压缩包处理与危险模块识别逻辑中。CVE-2025-10155允许攻击者仅通过修改文件扩展名(如将恶意pickle文件重命名为.pt或.bin),诱使PickleScan采用错误的处理流程,从而跳过对内容的深度解析;而PyTorch在加载时仍会根据实际文件格式成功还原并执行其中的恶意代码。
CVE-2025-10156涉及ZIP压缩包中的CRC校验字段。研究人员证实,只要人为写入错误的CRC值,即可导致PickleScan在解压模型包时触发异常,致使整体扫描失败。然而,PyTorch在默认编译设置下会忽略CRC校验,因此仍能成功加载并执行该压缩包内的恶意pickle代码。
第三个漏洞CVE-2025-10157则利用工具内置危险模块黑名单仅匹配完整模块名称的特性。攻击者可通过使用这些模块的子类或内部子模块(例如通过asyncio家族中的内部类触发系统命令执行),使PickleScan仅将其标记为“可疑”而非“高危”,从而绕过拦截,实际仍可实现任意代码执行。
上述三个零日漏洞已在与作者进行负责任披露协调后,由PickleScan维护团队于2025年9月发布的0.0.31版本中修复。研究人员强调,组织不应将PickleScan视为唯一防护手段,而应采用多层防御策略构建机器学习流程:优先采用Safetensors等不支持任意代码执行的更安全模型格式,在沙箱或隔离环境中加载外部模型,并将扫描失败视为高风险信号,一旦发生错误应直接阻断该模型在组织内部的传播。