
Prueba de concepto para CVE-2026-35250, un desbordamiento de enteros en DevVGA_VBVA de VirtualBox que provoca una denegación de servicio a través de un invitado privilegiado. Incluye análisis asistido por IA y módulo de explotación.
mi primer CVE es un 2.3
El problema está en src/VBox/Devices/Graphics/DevVGA_VBVA.cpp:740-743 ASSERT_GUEST_MSG_RETURN donde la comprobación de dimensiones usa || (OR) en lugar de && (AND). Un invitado puede proporcionar width=0x80000001, height=16 y la comprobación pasa porque height <= 2048. Luego, en las líneas 745-746:
cbPointerData = ((((SafeShape.u32Width + 7) / 8) * SafeShape.u32Height + 3) & ~3)
+ SafeShape.u32Width * 4 * SafeShape.u32Height;
La comprobación posterior en la línea 748 (cbPointerData <= cbShape - 24) pasa con el valor truncado (80 <= 104). El host asigna 80 bytes mediante RTMemAlloc, copia 80 bytes desde la VRAM del invitado, y luego pasa las dimensiones 2.147.483.649 × 16 con un búfer de 80 bytes a , que procesa la forma del cursor usando las dimensiones enormes.
pfnVBVAMousePointerShapeel host está calculando la máscara AND del ancho de línea de escaneo a partir de las dimensiones desbordadas y leyendo más allá del búfer de 80 bytes en el heap.
Crash 1 — Escritura a puntero NULL (hilo de visualización de 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)
Crash 2 — Sobre-lectura del heap (hilo EMT/principal):
ExceptionCode=0xc0000005 ExceptionAddress=VBoxC.dll+0x000d1194
ExceptionInformation[0]=0 (READ) ExceptionInformation[1]=0x00000263cefe8fd0
rax=0x80000001 (POISON_WIDTH) r12=0x10000001 ((WIDTH+7)/8 = ancho de línea de escaneo AND)
r13=0x10 (POISON_HEIGHT=16) r8=0x80000001 (POISON_WIDTH)
Dado que el host es de 64 bits, no creo que sea un problema explotable. Para "explotar", haz esto en el invitado:
# Guest: build and load
cd /path/to/poc
make
sudo insmod gfx1_exploit.ko