PickleScan零日漏洞分析:恶意PyTorch模型实现任意代码执行
2025年12月4日 - 安全研究人员披露了流行开源工具PickleScan中存在的多个关键零日漏洞。该工具被广泛用于扫描机器学习模型中的恶意代码,包括Hugging Face在内的AI社区都依赖它来检查使用Python的pickle格式保存的PyTorch模型。
漏洞背景:Pickle格式的双刃剑特性
Python的pickle模块虽然灵活,但其加载过程可以执行任意Python代码,这带来了显著的安全风险。这意味着,一个模型文件可能暗藏窃取数据、安装后门或接管系统的恶意指令。
漏洞详情:三种绕过技术
1. 文件扩展名绕过 (CVE‑2025‑10155)
攻击者只需将恶意pickle文件重命名为PyTorch风格的扩展名(如.bin或.pt),即可混淆PickleScan,导致其无法分析文件内容。而PyTorch在加载时仍会执行其中包含的代码。
2. ZIP存档CRC绕过 (CVE‑2025‑10156)
此漏洞利用了ZIP存档的处理方式。攻击者通过破坏ZIP文件内部的CRC(循环冗余校验)值,可以导致PickleScan崩溃或扫描失败,而PyTorch仍可能从受损的存档中加载并执行模型,形成一个恶意软件可以藏身的盲点。
3. 不安全全局变量绕过 (CVE‑2025‑10157)
攻击者针对PickleScan对“不安全”模块的阻止列表,利用危险模块(如asyncio)的子类或内部导入来绕过检测。这使得恶意代码仅被标记为“可疑”而非“危险”,尽管任意命令仍可被执行。
影响与风险
| CVE ID | 漏洞名称 | CVSS 分数 | 严重等级 |
|---|---|---|---|
| CVE-2025-10155 | 文件扩展名绕过 | 9.3 | 严重 |
| CVE-2025-10156 | ZIP存档CRC绕过 | 9.3 | 严重 |
| CVE-2025-10157 | 不安全全局变量绕过 | 9.3 | 严重 |
由于众多平台和公司将PickleScan作为主要的防御层,这些漏洞对AI模型构成了严重的供应链风险。
时间线与修复
JFrog团队于2025年6月29日向PickleScan维护者报告了这些漏洞。修复已在2025年9月2日发布的0.0.31版本中完成。用户被敦促立即升级。
安全建议
- 立即升级:将PickleScan更新至0.0.31或更高版本。
- 避免使用不安全的Pickle模型:尽可能选择更安全的格式,如Safetensors。
- 采用分层防御:结合使用沙箱、安全模型仓库等其他安全措施。