
Доказательство концепции для CVE-2026-35250 — целочисленное переполнение в DevVGA_VBVA в VirtualBox, приводящее к отказу в обслуживании через привилегированного гостя. Включает анализ с помощью ИИ и модуль эксплойта.
мой первый CVE — это 2.3
Проблема находится в src/VBox/Devices/Graphics/DevVGA_VBVA.cpp:740-743 в ASSERT_GUEST_MSG_RETURN, где проверка размеров использует || (ИЛИ) вместо && (И). Гость может передать 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). Хост выделяет 80 байт через RTMemAlloc, копирует 80 байт из гостевой VRAM, затем передаёт размеры 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-маски)
r13=0x10 (POISON_HEIGHT=16) r8=0x80000001 (POISON_WIDTH)
Поскольку хост 64-битный, я не думаю, что это эксплуатируемая проблема. Для «эксплуатации» выполните на госте следующее:
# Гость: сборка и загрузка
cd /path/to/poc
make
sudo insmod gfx1_exploit.ko