xooxo/CVE-2026-35250
GitHub: xooxo/CVE-2026-35250
这是一个 VirtualBox VBVA 图形设备整数溢出漏洞(CVE-2026-35250)的 PoC,展示如何从特权客户机触发主机堆溢出导致 DoS 崩溃。
Stars: 0 | Forks: 0
# CVE-2026-35250
我发现的第一个 CVE 评分为 2.3
- DevVGA_VBVA 上的整数溢出
- 可能导致来自特权客户机的 DoS
- 发现过程和 PoC 完全由 AI 辅助编写
问题出在 `src/VBox/Devices/Graphics/DevVGA_VBVA.cpp:740-743` 的 `ASSERT_GUEST_MSG_RETURN`,其中的维度检查使用了 `||` (OR) 而不是 `&&` (AND)。客户机可以提供 `width=0x80000001, height=16`,该检查会通过,因为 `height <= 2048`。然后在第 745-746 行:
```
cbPointerData = ((((SafeShape.u32Width + 7) / 8) * SafeShape.u32Height + 3) & ~3)
+ SafeShape.u32Width * 4 * SafeShape.u32Height;
```
随后在第 748 行的检查 (`cbPointerData <= cbShape - 24`) 也会通过截断后的值 (80 <= 104)。主机通过 `RTMemAlloc` 分配了 80 字节,从客户机 VRAM 中复制了 80 字节,然后将 2,147,483,649 × 16 的维度以及一个 80 字节的缓冲区传递给 `pfnVBVAMousePointerShape`,该函数会使用这些巨大的维度来处理光标形状。
主机根据溢出后的维度计算 AND 掩码扫描线宽度,并读取超出 80 字节堆缓冲区的内容。
崩溃 1 — NULL 指针写入 (GUI 显示线程):
```
ExceptionCode=0xc0000005 ExceptionAddress=VirtualBoxVM.dll+0x000267a2
ExceptionInformation[0]=1 (WRITE) ExceptionInformation[1]=0x0000000000000000 (NULL)
rsi=0x80000001 (POISON_WIDTH) r13=0x10 (POISON_HEIGHT=16) rcx=0x0 (NULL dest)
```
崩溃 2 — 堆越界读取 (EMT/主线程):
```
ExceptionCode=0xc0000005 ExceptionAddress=VBoxC.dll+0x000d1194
ExceptionInformation[0]=0 (READ) ExceptionInformation[1]=0x00000263cefe8fd0
rax=0x80000001 (POISON_WIDTH) r12=0x10000001 ((WIDTH+7)/8 = AND scanline width)
r13=0x10 (POISON_HEIGHT=16) r8=0x80000001 (POISON_WIDTH)
```
由于主机是 64 位的,我认为这不是一个可利用的漏洞。若要触发该“漏洞”,请在客户机上执行以下操作:
```
# Guest: 构建与加载
cd /path/to/poc
make
sudo insmod gfx1_exploit.ko
```
标签:0day, AI辅助漏洞发现, C++, CVE-2026-35250, CVSS 2.3, DevVGA_VBVA, heap-buffer-overflow, PoC, VirtualBox, 堆溢出, 客户端加密, 拒绝服务, 数据擦除, 整数溢出, 暴力破解, 空指针解引用, 虚拟化安全, 虚拟机逃逸, 逻辑漏洞