CVE-2026-34159llama.cpp是一个用C/C++实现的LLM模型推理库。在b8492版本之前,其RPC后端存在一个严重的漏洞。由于`deserialize_tensor()`函数在处理张量时,当缓冲区字段为0时会跳过边界验证,未经身份验证的攻击者可以通过发送精心构造的`GRAPH_COMPUTE`消息,实现对任意进程内存的读取和写入。结合`ALLOC_BUFFER`和`BUFFER_GET_BASE`操作导致的指针泄露,攻击者可以绕过ASLR(地址空间布局随机化)保护,进而在目标系统上执行任意代码。该漏洞利用无需认证,仅需能访问RPC服务器的TCP端口。
该漏洞发生在llama.cpp的RPC后端处理逻辑中。核心问题在于`deserialize_tensor()`函数缺少必要的边界检查。当函数检测到张量的缓冲区字段为0时,它会错误地假定不需要进行边界验证,从而允许处理无效的内存地址。攻击者首先利用`ALLOC_BUFFER`和`BUFFER_GET_BASE`消息交互,泄露进程内存中的指针地址,从而计算出基址以绕过ASLR。随后,攻击者发送恶意的`GRAPH_COMPUTE`消息,利用之前绕过的检查机制,向计算出的任意内存地址写入数据。由于能够控制指令指针或覆盖关键内存区域,攻击者最终能够获得远程代码执行权限,完全控制服务器。