vLLM反序列化漏洞剖析:从拒绝服务到潜在的远程代码执行

本文详细分析了CVE-2025-62164漏洞,该漏洞影响vLLM 0.10.2及以上版本,攻击者可利用Completions API端点通过特制张量触发内存损坏,导致服务崩溃甚至远程代码执行。根本原因在于PyTorch 2.8.0的默认行为变更。

vLLM反序列化漏洞剖析:从拒绝服务到潜在的远程代码执行

漏洞概述

在vLLM 0.10.2及更高版本的Completions API端点中,存在一个可导致服务崩溃(拒绝服务)并可能引发远程代码执行(RCE)的内存损坏漏洞。该漏洞位于处理用户提供的提示嵌入向量(prompt embeddings)时,端点使用torch.load()加载序列化的张量,但未进行充分的验证。

技术细节

由于PyTorch 2.8.0中引入的一项变更,稀疏张量的完整性检查默认被禁用。因此,恶意构造的张量可以绕过内部边界检查,并在调用to_dense()期间触发越界内存写入。这种内存损坏会导致vLLM崩溃,并可能使托管vLLM的服务器执行任意代码。

漏洞位于vllm/entrypoints/renderer.py文件第148行的代码中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def _load_and_validate_embed(embed: bytes) -> EngineEmbedsPrompt:
    tensor = torch.load(
        io.BytesIO(pybase64.b64decode(embed, validate=True)),
        weights_only=True,
        map_location=torch.device("cpu"),
    )
    assert isinstance(tensor, torch.Tensor) and tensor.dtype in (
        torch.float32,
        torch.bfloat16,
        torch.float16,
    )
    tensor = tensor.to_dense()

由于缺少检查,加载用户提供的无效提示嵌入张量会导致在调用to_dense时发生越界写入。

影响范围

  • 受影响版本:vLLM >= 0.10.2, < 0.11.1
  • 已修复版本:vLLM 0.11.1

所有能访问此API的用户都可能利用此漏洞。对不可信输入的不安全反序列化可被滥用以实现拒绝服务,并可能在vLLM服务器进程中实现远程代码执行。这影响了将vLLM作为服务器运行或任何反序列化不可信/模型提供负载的实例。

修复方案

该漏洞已在vLLM项目的PR #27204中得到修复。修复的核心是确保在使用torch.load加载张量时,显式启用稀疏张量的完整性检查,或在处理前进行更严格的验证。

关联信息

  • CVE ID:CVE-2025-62164
  • GHSA ID:GHSA-mrw7-hf4f-83pf
  • 相关弱点
    • CWE-20: 不正确的输入验证
    • CWE-123: 写任意值到任意地址的条件
    • CWE-502: 反序列化不可信数据
    • CWE-787: 越界写入

致谢

此漏洞由AXION安全研究团队(Omri Fainaro, Bary Levy)发现并协调披露。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计