
Proof-of-Concept für CVE-2026-35250, einen Integer-Überlauf in VirtualBoxs DevVGA_VBVA, der zu einem Denial-of-Service über einen privilegierten Gast führt. Enthält KI-gestützte Analyse und Exploit-Modul.
Mein allererstes CVE ist eine 2.3
Das Problem liegt bei src/VBox/Devices/Graphics/DevVGA_VBVA.cpp:740-743 ASSERT_GUEST_MSG_RETURN, wo die Dimensionsprüfung || (ODER) anstelle von && (UND) verwendet. Ein Gast kann width=0x80000001, height=16 liefern und die Prüfung besteht, weil height <= 2048. Dann in den Zeilen 745-746:
cbPointerData = ((((SafeShape.u32Width + 7) / 8) * SafeShape.u32Height + 3) & ~3)
+ SafeShape.u32Width * 4 * SafeShape.u32Height;
Die anschließende Prüfung in Zeile 748 (cbPointerData <= cbShape - 24) besteht mit dem abgeschnittenen Wert (80 <= 104). Der Host weist 80 Bytes über RTMemAlloc zu, kopiert 80 Bytes aus dem Gast-VRAM und übergibt dann die Dimensionen 2.147.483.649 × 16 mit einem 80-Byte-Puffer an , das die Cursorform mit den riesigen Dimensionen verarbeitet.
pfnVBVAMousePointerShapeDer Host berechnet die AND-Maske für die Scanline-Breite aus den überlaufenen Dimensionen und liest über den 80-Byte-Heap-Puffer hinaus.
Absturz 1 — NULL-Pointer-SCHREIBEN (GUI-Anzeigethread):
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)
Absturz 2 — Heap-Über-LESEN (EMT/Hauptthread):
ExceptionCode=0xc0000005 ExceptionAddress=VBoxC.dll+0x000d1194
ExceptionInformation[0]=0 (READ) ExceptionInformation[1]=0x00000263cefe8fd0
rax=0x80000001 (POISON_WIDTH) r12=0x10000001 ((WIDTH+7)/8 = AND-Scanline-Breite)
r13=0x10 (POISON_HEIGHT=16) r8=0x80000001 (POISON_WIDTH)
Da der Host 64-Bit ist, glaube ich nicht, dass es ein ausnutzbares Problem ist. Für den "Exploit" mache Folgendes auf dem Gast:
# Gast: bauen und laden
cd /path/to/poc
make
sudo insmod gfx1_exploit.ko