Написать пост

В эмуляторе VirtualBox обнаружена 0-day уязвимость

Аватар Сергей Штукатуров

Баг позволяет исполнить вредоносный код за пределами виртуальной машины VirtualBox. Уязвимость присутствует в VirtualBox 5.2.20 и более ранних версиях.

Обложка поста В эмуляторе VirtualBox обнаружена 0-day уязвимость

MorteNoir, пользователь сайта Хабрахабр, подробно описал схему использования уязвимости программы VirtualBox. Это ПО — эмулятор виртуальной машины, позволяющий смоделировать ЭВМ с заданными характеристиками и производить необходимые манипуляции, не опасаясь повреждения основной системы. Эксплойт даёт вредоносному коду возможность выбраться за пределы песочницы и действовать на уровне базовой ОС с высокими правами доступа.

Принцип действия

Уязвимость локализована в виртуальном сетевом адаптере Intel PRO/1000 MT Desktop (82540EM), работающем в режиме преобразования сетевых адресов (NAT). При создании виртуальной машины в VirtualBox по умолчанию устанавливается именно это оборудование.

Сетевой адаптер использует спецификацию 82540EM, оборачивая пакеты в Tx-дескрипторы. Эта спецификация предусматривает три типа дескрипторов: legacy, context и data, из которых интересны только два последних. Из-за бага злоумышленник может вызвать переполнение кучи (heap overflow).

Система обычно сначала обрабатывает context дескрипторы, устанавливающие, в частности, максимальный размер пакета. Такой подход позволяет избежать внесения изменений в переменную u16MaxPktLen в процессе обработки. Однако MorteNoir продемонстрировал способ обхода этой защиты. Он приводит примерный набор дескрипторов, необходимый для атаки:

			context_1.header_length = 0
context_1.maximum_segment_size = 0x3010
context_1.tcp_segmentation_enabled = true

data_2.data_length = 0x10
data_2.end_of_packet = false
data_2.tcp_segmentation_enabled = true

data_3.data_length = 0
data_3.end_of_packet = true
data_3.tcp_segmentation_enabled = true

context_4.header_length = 0
context_4.maximum_segment_size = 0xF
context_4.tcp_segmentation_enabled = true

data_5.data_length = 0x4188
data_5.end_of_packet = true
data_5.tcp_segmentation_enabled = true
		

В примере следует обратить внимание на флаг end_of_packet пакета data_3, установленный в состояние true. Это вынудит систему сначала обработать первые три пакета и только потом перейти к оставшимся. Из-за нарушения порядка обработки переменная u16MaxPktLen изменится, поэтому последние два пакета вызовут целочисленное переполнение.

Автор предположил несколько вариантов использования этого бага в VirtualBox. В самом простом случае злоумышленник может вызвать переполнение кучи или переполнение буфера стека, спровоцировав перезапись указателей и падение системы.

Защита от найденной уязвимости

Уязвимость присутствует в VirtualBox 5.2.20 и более ранних версиях. При этом не имеет значения какая ОС установлена на основной или виртуальной машине. Получив доступ, хакер реализует дальнейшее внедрение благодаря уже известным уязвимостям. Единственное требование к реализации — установленная на эмуляции ЭВМ сетевая карта Intel PRO/1000 MT Desktop (82540EM), работающая в режиме NAT. В качестве защиты автор предлагает изменить адаптер или хотя бы отключить режим преобразования сетевых адресов.

MorteNoir заявляет, что опубликовал подобные данные о найденной уязвимости, так как недоволен медлительностью разработчиков VirtualBox в устранении багов и их неопределённой политикой в области bug bounty. Сведений о реальном использовании ошибки пока нет.

Специалисты по IT-безопасности борются с угрозами различными способами. Обычно сообщение об уязвимости направляют разработчикам ПО и оборудования, давая время для исправления перед обнародованием информации. Иногда специалисты самостоятельно исправляют баги в оборудовании. Так, один из российских системных администраторов взламывал маршрутизаторы MikroTik и изменял правила брандмауэра, нейтрализуя уязвимость нулевого дня CVE-2018-14847.

Следите за новыми постами
Следите за новыми постами по любимым темам
1К открытий1К показов