
作为现代深度学习与AI研究的核心框架,PyTorch的开发团队近日修复了一个高危漏洞(CVE-2026-24747,CVSS评分高达8.8)。这个漏洞的严重性在于,它绕过了PyTorch为防范风险而专门设计的核心安全机制——即便用户启用了特定的防护设置,攻击者依然有机会在目标系统上执行任意代码。
安全机制为何失效?
漏洞的根源,出在 torch.load() 函数中的 weights_only=True 反序列化器上。在Python AI开发领域,torch.load() 是加载已保存模型检查点(如.pth文件)的标准方法。由于Python内置的 pickle 模块在反序列化时存在执行任意指令的安全风险,PyTorch特意引入了 weights_only=True 这个标志。它的设计承诺是:只安全地加载模型数据(即权重),并完全阻断任何潜在的可执行代码。
然而,这个被许多开发者信赖的“安全模式”并非固若金汤。
漏洞技术细节剖析
安全研究人员发现,这个防护机制存在根本性的验证缺陷。根据PyTorch官方的漏洞公告描述,问题在于 “weights_only=True 反序列化器未能正确验证pickle操作码和存储元数据” 。
从技术层面看,这属于一种内存损坏问题,最终可被利用升级为远程代码执行(RCE)。攻击者可以通过精心构造一个恶意的模型检查点文件(.pth)来触发两种特定的故障情形:
- 堆内存损坏:对非字典类型的数据结构错误地应用
SETITEM 或 SETITEMS 这类pickle操作码。
- 存储大小不匹配:在存档中创建“声明的元素数量与实际数据之间的存储大小不匹配”。
当用户加载这个被污染的检查点文件时(他们可能误以为受限的 weights_only 模式能确保万无一失),有缺陷的反序列化过程将损坏程序内存,从而可能让攻击者完全劫持受害者的进程。
对AI供应链安全的现实冲击
这个漏洞对AI开源生态和供应链安全的影响尤为严重。无论是学术界的研究人员还是工业界的工程师,都习惯了从Hugging Face、GitHub等公共存储库下载并测试他人发布的预训练模型检查点。如果其中混入了利用此漏洞的恶意模型,后果不堪设想。
官方公告也发出了明确警告:“能够诱使用户加载恶意检查点文件的攻击者,可以在受害者进程的上下文中实现任意代码执行。” 这意味着,一次看似常规的模型加载操作,就可能让攻击者获得与加载程序相同的系统权限。
影响范围与紧急修复方案
该漏洞影响了 PyTorch 2.9.1 及之前的所有版本。PyTorch团队已经在 2.10.0 版本 中发布了修复补丁。
对于所有使用PyTorch进行开发、研究或部署的团队和个人而言,当务之急是立即检查并升级PyTorch环境至安全版本。仅仅依赖 weights_only=True 标志来保障模型加载安全的实践已经不再可靠,及时更新框架才是杜绝此类风险的根本之道。
参考来源:
Safety Broken: PyTorch “Safe” Mode Bypassed by Critical RCE Flaw
https://securityonline.info/safety-broken-pytorch-safe-mode-bypassed-by-critical-rce-flaw/
|