Уязвимость BDU:2025-08108 (CVE-2025-30712) Oracle VM VirtualBox
Уязвимость BDU:2025-08108 (CVE-2025-30712) затрагивает функцию vmsvga3dSurfaceMipBufferSize() в компоненте Core Oracle VM VirtualBox 7.1.6. Она связана с целочисленным переполнением, которое позволяет злоумышленнику с высокими привилегиями спровоцировать выделение буфера размером 0 байт, в то время как система ожидает буфер ненулевого размера. Это создает условия для чтения/записи за пределами выделенной памяти, эскалации привилегий и полного побега из виртуальной машины (VM escape).
Анализ уязвимости
Уровень опасности: 8.1 (HIGH)
Вектор атаки: CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:L
-
AV:L (Attack Vector): Локальный – требует физического или логического доступа к целевой системе.
-
AC:L (Attack Complexity): Низкая – эксплуатация не требует сложных условий.
-
PR:H (Privileges Required): Высокие – необходимы привилегии администратора в гостевой ОС.
-
UI:N (User Interaction): Не требуется – атака работает без участия пользователя.
-
S:C (Scope): Изменён – воздействие распространяется за пределы уязвимого компонента.
-
C:H (Confidentiality Impact): Высокий – полный доступ к конфиденциальным данным.
-
I:H (Integrity Impact): Высокий – полный контроль над данными и их модификация.
-
A:L (Availability Impact): Низкий – частичный отказ в обслуживании.
Условия эксплуатации
Для успешной атаки необходимо:
-
Доступ к гостевой ОС с правами администратора.
-
Наличие уязвимой версии VirtualBox 7.1.6.
-
Активированный 3D-ускоритель (компонент VMSVGA).
-
Возможность выполнения произвольного кода в гостевой системе.
Технический анализ эксплоита
Этап 1: Создание уязвимой поверхности
Эксплоит начинается с создания поверхности (buggy_surface) через манипуляцию параметрами mip-уровней. Целочисленное переполнение в vmsvga3dSurfaceMipBufferSize() приводит к вызову malloc(0), в то время как VirtualBox считает размер буфера большим нуля.
При ширине 0x100000 и размере блока 16 байт, pitch = 0x100000 * 16 = 0x1000000 (корректно). Но при width = 0x1000000, pitch = 0, что вызывает выделение нулевого буфера.
Этап 2: Heap grooming и OOB-доступ
Злоумышленник создает объект VMSVGAGBO с уникальным маркером (cbTotal = 0x1421337), который размещается в памяти рядом с buggy_surface. Используя команду SVGA_3D_CMD_DX_BUFFER_COPY, происходит чтение за пределами нулевого буфера:
memcpy(&dest_buffer[destX], &src_buffer[srcX], width);
Здесь src_buffer указывает на нулевой буфер, но проверка границ опирается на ожидаемый размер (cbRow), а не реальный. Это позволяет прочитать маркер 0x1421337 и определить расположение контролируемых структур.
Этап 3: Arbitrary Read/Write
Через подмену полей VMSVGAGBO (cbTotal, pvHost) достигаются примитивы произвольного чтения/записи:
-
Чтение: Используется команда
vmsvga3dDXReadbackCOTable, которая копирует данные из памяти хоста в гостевую ОС. -
Запись: Команда
GrowCOTableзаписывает данные из гостевой ОС в память хоста.
Пример повреждения структуры:
// Повреждение GBO через OOB-запись VMSVGAGBO target_gbo = locate_via_egg(0x1421337); // Найденный объект target_gbo.cbTotal = 0x1000; // Поддельный размер target_gbo.pvHost = (void*)0xCAFEBABE; // Указатель на произвольный адрес
Этап 4: Обход ASLR и ROP-цепь
-
Через указатель
nodeLRUвVMSVGAMOBраскрывается адресVMSVGAR3STATE, содержащий указатели на функции. -
Вычисляется база
VBoxDD.soчерез смещение отpfnCommandClear. -
Через GOT
VBoxDD.soнаходится базаVBoxRT.so. -
Создается ROP-цепь для:
-
Прокрутки стека в контролируемую область кучи.
-
Вызова
memprotectдля разрешения исполнения шеллкода. -
Перехода на шеллкод.
-
; Пример ROP-гаджета (x64) mov rsp, [rax+0x18] ; Переключение стека ret
Этап 5: Выполнение кода
Искажается указатель pfnCommandClear, после чего выполнение триггерится через vmsvga3dCommandClear. Это приводит к выполнению ROP-цепи и шеллкода на хосте.
Возможные последствия атаки
-
Доступ к данным хоста: Чтение файлов (например,
~/.ssh/id_rsa), дамп памяти ВМ. -
Компрометация других ВМ: Атаки на соседние виртуальные машины через сеть хоста.
-
Установка бэкдоров: Модификация системных служб или гипервизора.
-
Криптоджекинг: Использование ресурсов хоста для майнинга.
-
Отказ в обслуживании: Краш VirtualBox через частичный DoS.
Методы защиты
1. Обновление ПО
Установите патч из Oracle Critical Patch Update (апрель 2025).
2. Снижение привилегий
-
Запускайте VirtualBox от непривилегированного пользователя:
sudo useradd vboxuser sudo -u vboxuser VBoxManage startvm "VM_NAME"
3. Изоляция ВМ
-
Запретите прямой доступ к хосту из ВМ (блокировка
host-onlyсетей):# iptables правило для изоляции vboxnet0 sudo iptables -A FORWARD -i vboxnet0 -o eth0 -j DROP
4. Контроль целостности
-
Мониторинг критичных файлов VirtualBox (например,
VBoxDD.so) с помощью AIDE или OSSEC:# Пример конфига AIDE /usr/lib/virtualbox/VBoxDD.so p+i+n+u+g
-
Регулярная верификация хешей SHA-256:
sha256sum /usr/lib/virtualbox/VBoxDD.so # Сравнить с эталоном из дистрибутива
5. Правила для Suricata/IPS
Для сетевой эксплуатации (например, через веб-интерфейс) используйте правила:
alert tcp any any -> $HOME_NET 18083 (msg:"CVE-2025-30712 VirtualBox VM Escape Attempt"; content:"|08|"; content:"SVGA_3D_CMD_DX_BUFFER_COPY"; content:"|00 00 00|"; distance:0; within:50; fast_pattern; sid:202530712; rev:1;)
Данное правило можно найти в моём наборе правил к Suricata (https://alekseycheremnykh.ru/post/moj-nabor-pravil-k-suricata/).
Размещение: На хостовом интерфейсе, где доступны порты VirtualBox (например, vboxnet0).
Важно: Для локальных атак (основной вектор) IPS неэффективны!
Заключение
BDU:2025-08108 (CVE-2025-30712) демонстрирует критичность ошибок в базовых вычислениях (целочисленное переполнение) в гипервизорах. Эксплуатация позволяет полный побег из ВМ с высоким уровнем устойчивости (100% успех через <10 попыток). Защита требует не только установки патчей, но и архитектурных изменений: изоляция ВМ, контроль целостности, минимальные привилегии. Для продуктов, использующих VirtualBox рекомендуется срочное обновление базовых компонентов.