Уязвимость в Oracle VM VirtualBox
Уязвимость в Oracle VM VirtualBox
Категория: Программы Теги: Уязвимости Опубликовано: 9 июля 2025

Уязвимость 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): Низкий – частичный отказ в обслуживании.


Условия эксплуатации

Для успешной атаки необходимо:

  1. Доступ к гостевой ОС с правами администратора.

  2. Наличие уязвимой версии VirtualBox 7.1.6.

  3. Активированный 3D-ускоритель (компонент VMSVGA).

  4. Возможность выполнения произвольного кода в гостевой системе.


Технический анализ эксплоита

Этап 1: Создание уязвимой поверхности

Эксплоит начинается с создания поверхности (buggy_surface) через манипуляцию параметрами mip-уровней. Целочисленное переполнение в vmsvga3dSurfaceMipBufferSize() приводит к вызову malloc(0), в то время как VirtualBox считает размер буфера большим нуля.

При ширине 0x100000 и размере блока 16 байт, pitch = 0x100000 * 16 = 0x1000000 (корректно). Но при width = 0x1000000pitch = 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 (cbTotalpvHost) достигаются примитивы произвольного чтения/записи:

  • Чтение: Используется команда vmsvga3dDXReadbackCOTable, которая копирует данные из памяти хоста в гостевую ОС.

  • Запись: Команда GrowCOTable записывает данные из гостевой ОС в память хоста.
    Пример повреждения структуры:

// Повреждение GBO через OOB-запись
VMSVGAGBO target_gbo = locate_via_egg(0x1421337); // Найденный объект
target_gbo.cbTotal = 0x1000;                      // Поддельный размер
target_gbo.pvHost = (void*)0xCAFEBABE;            // Указатель на произвольный адрес

Этап 4: Обход ASLR и ROP-цепь

  1. Через указатель nodeLRU в VMSVGAMOB раскрывается адрес VMSVGAR3STATE, содержащий указатели на функции.

  2. Вычисляется база VBoxDD.so через смещение от pfnCommandClear.

  3. Через GOT VBoxDD.so находится база VBoxRT.so.

  4. Создается 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 рекомендуется срочное обновление базовых компонентов.

Алексей Черемных Алексей Черемных
208