
VirtualBox 7.2.20 — критическая уязвимость — локальная — путаница типов / произвольное чтение-запись — наложение SAS1068 CONFIG SCSI-SPI
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-lsilogic-sas-config
Класс: путаница типов / произвольное чтение-запись Доступ: локальный (гость)
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
SAS1068 MPT CONFIG трактует SCSI-SPI Port 0 как 12-байтовую страницу. На SAS эта страница — вторая половина объединения: pManufacturingPage7 плюс cbManufacturingPage7. CONFIG READ от гостя через DMA утекает указатель кучи. CONFIG WRITE размещает указатель и размер. Затем manufacturing page 7 копирует данные через размещённый указатель.
Гость ring3 на подключённом SAS1068 (PDM LsiLogicSas, PCI 1000:0054) получает произвольное чтение/запись в процессе VM. Это куча VirtualBoxVM / VBoxHeadless, а не побег в ядро хоста.
| ID | CVE пока нет |
| Класс | путаница типов / произвольное чтение-запись |
| Доступ | локальный (гость) |
| CWE | CWE-843, CWE-822 |
| CVSS | Критический: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Продукт | VirtualBox OSS |
| Затронуто | 7.2.20 (f2792cf44) |
| Требуется | подключённый SAS1068 (PDM LsiLogicSas, PCI 1000:0054) |
| Лицензия | GNU Affero GPL v3.0 |
| Стенд | loopback-стенд с исходным кодом |
Метод: гость ring3 программирует MMIO doorbell SAS1068 или request FIFO с MPT_MESSAGE_HDR_FUNCTION_CONFIG (0x04), тип страницы SCSI-SPI Port 0 (0x03). Диспетчеризация всегда вызывает SPI-геттер. Только EXTENDED ограничен SAS. Геттер атрибутов страницы закомментирован, поэтому страница Readonly Port 0 по-прежнему доступна для записи. SPI Port 0 упакован в 12 байт и накладывается на SasPages.pManufacturingPage7 (8) плюс cbManufacturingPage7 (4).
| Привилегия | Тип | Статус | Что даёт |
|---|---|---|---|
| CONFIG SCSI-SPI Port 0 READ | разведка | доказано на стенде | DMA указателя кучи процесса VM pManufacturingPage7 и его размера в память гостя. Вход для ASLR. |
| CONFIG SCSI-SPI Port 0 WRITE | целостность | доказано на стенде | размещение выбранного гостем указателя + размера поверх этих полей SAS |
| manufacturing page 7 CONFIG READ | целостность | доказано на стенде | копирование байтов хоста с размещённого адреса в GPA гостя (VBOX-LSILOGIC-SAS-CONFIG-WITNESS) |
| manufacturing page 7 CONFIG WRITE | целостность | выведено из того же геттера | копирование байтов гостя на размещённый адрес (произвольная запись в VirtualBoxVM) |
| SPI-страницы Port 1 / Device 0 | разведка / целостность | выведено из наложения | Port 1 утекает/размещает pSASIOUnitPage0; Device 0 page 0 попадает в paPHYs; Device 0 page 1 попадает в pSASDeviceHead |
| произвольный размещённый указатель | доступность | выведено | падение процесса VM при следующем обращении к странице SAS или в lsilogicR3ConfigurationPagesFree |
Закрыто смежное:
SpiPages — это реальная раскладка; для этой путаницы типов нужен SAS1068)VERR_NOT_FOUND)Это произвольное чтение/запись в процессе VM, а не побег в ядро хоста. Для полного доступа пользователя хоста всё ещё нужен оставшийся недостаток усиления защиты. Я не сочетал это с оставшейся записью 3D: VMSVGA DX11 UAF (d691aa68) закрыт на этой ревизии.
Без Guest Additions. Без 3D. Без VRDP. Не PUEL. Достаточно враждебного гостя ring3; встроенный драйвер mpt/mptsas не требуется.
Я остановился на OSS 7.2.20 после CPU за сентябрь 2026 и прошёлся по LsiLogic MPT CONFIG. Тихая утечка стека ответов 2026 года уже закрыта: 122c6880 обнуляет (RT_ZERO) MptReplyUnion при ошибке SCSI I/O. Я искал остаток этого класса, а не тот сток.
Остаток — это union, а не ответ в стеке:
union {
MptConfigurationPagesSpi SpiPages;
MptConfigurationPagesSas SasPages;
} u; /* DevLsiLogicSCSI.h:3323 */
SAS alloc заполняет host-указатели SasPages и никогда не запускает инициализацию страницы SPI. Геттер порта SPI в DevLsiLogicSCSI.cpp:2795 не имеет проверки enmCtrlType. Случаи SPI в диспетчеризации CONFIG не ограничены. Геттер атрибута страницы закомментирован в cpp:3159. Manufacturing page 7 в cpp:2701 ограничена SAS, что является предполагаемым путём, и разыменовывает pManufacturingPage7 без проверки на NULL. Именно так типизированный SPI Port 0 READ/WRITE превращается в утечку и внедрение SAS-указателя.
Уже зафиксированные неверные повороты: повторная подача 122c6880; трактовка LSI53C1030 по умолчанию как этой ошибки; раздувание краха с диким указателем до побега из host-ядра; живая VM, когда достаточно упакованного оверлея. Театр: reverse shell. Оракул — данные фиктивной страницы CONTROL, затем утечка/внедрение/произвольное чтение VBOX-LSILOGIC-SAS-CONFIG-WITNESS.
cd lab
./run.sh
Или python3 vbox-lsilogic-sas-config-Abraxas-Labs.py. Исходный harness структур pin. VirtualBox не загружается. Проект Compose vbox-lsilogic-sas-config, network_mode: none. Ничего не монтировать.
CONTROL: наложение чтения Port 0 с типом SPI — это данные фиктивной страницы, а не указатель кучи manufacturing-page-7.
SAS в замешательстве: READ Port 0 утекает pManufacturingPage7, совпадающий с calloc. WRITE Port 0 внедряет второй указатель буфера-свидетеля + размер. Геттер manufacturing page 7 вместе с CONFIG READ копирует свидетеля в массив GPA гостя.
SUCCESS vbox-lsilogic-sas-config leak=yes plant=yes arb-read=yes VBOX-LSILOGIC-SAS-CONFIG-WITNESS
Ограничить типы страниц SCSI-SPI условием enmCtrlType == LSILOGICCTRLTYPE_SCSI_SPI. Восстановить проверку атрибутов страницы, чтобы Readonly Port 0 оставался доступным только для чтения. Добавить проверку на NULL для pManufacturingPage7 (и других указателей SAS) перед разыменованием. Прекратить наложение SpiPages и SasPages в одном объединении.
f2792cf44f663989818507e36d3db5f978523c5e)DevLsiLogicSCSI.h объединение на строке 3323; размер SPI Port 0 равен 12 на строке 2251DevLsiLogicSCSI.cpp выделение SAS на строке 619; геттер manufacturing на строке 2701; геттер SPI Port на строке 2795; атрибут страницы закомментирован на строке 3159; CONFIG READ/WRITE на строке 3293122c6880 (стек ошибок SCSI I/O MptReplyUnion)