Уязвимость в VirtualBox, позволяющая выполнить код на стороне хост-системы

Сергей Зеленюк раскрыл детальную информацию об ещё не исправленной (0-day) критической уязвимости в системе виртуализации VirtualBox, позволяющей обойти механизм изоляции гостевых систем и выполнить код на стороне хост-окружения. Для демонстрации уязвимости подготовлен рабочий прототип эксплоита. Для атаки требуется наличие прав root или администратора в гостевой системе. Проблема проявляется в конфигурации по умолчанию с сетевым адаптером E1000 при применении трансляции адресов (NAT) для организации сетевого взаимодействия.

Проблема вызвана переполнением буфера в коде эмуляции сетевого адаптера E1000 (Intel PRO/1000 MT Desktop). Практическая атака, использующая данное переполнение буфера, разделена на несколько этапов: через манипуляцией с Tx-дескрипторами пакета (структура с информацией о пакете), создаются условия для целочисленного переполнения через нижнюю границу (integer underflow), что позволяет организовать загрузку произвольных данных в буфер и вызвать его переполнение с наложением не уместившегося в буфер хвоста на область указателей или инициировать переполнение стека.

Суть уязвимости в том, что возможно создание условий при которых Tx-дескрипторы данных, могут поступить для обработки раньше Tx-дескрипторов контекста. Дескрипторы данных включают сведения о физическом адресе и размере пакета. Дескрипторы контекста содержат информацию максимальном размере пакета и сегментации. Размер пакета в дескрипторе с данными всегда меньше максимального размера пакета в дескриптора контекста. В случае нарушения порядка обработки Tx-дескрипторов при вычислении размера возникает целочисленное переполнение через нижнюю границу.

Атака позволяет выполнить код на уровне третьего кольца защиты (ring3) в хост-окружении, после чего можно воспользоваться техникой повышения привилегий до уровня ring0 через манипуляции с /dev/vboxdrv. Подготовленный прототип эксплоита демонстрирует 100% повторяемость и не зависит от сборки VirtualBox. Эксплоит оформлен в виде модуля ядра, загружаемого на стороне гостевой системы.

Уязвимость проявляется независимо от операционных систем, используемых на стороне хоста и гостевого окружения. В качестве обходного пути для защиты рекомендуется сменить в настройках эмулируемый сетевой адаптер на PCnet или Paravirtualized Network.

Решение опубликовать сведения об уязвимости не дожидаясь исправления вызваны неприятием сложившейся практики в области связанных с безопасностью исследований и негативным опытом информирования о уязвимостах в прошлом. Исследователям приходится ждать по полгода, пока будет исправлена уязвимость, а также возникает неопределённость при участии в программах выплаты вознаграждений за выявление уязвимостей. При участии в программах выплаты вознаграждений приходится более месяца ждать пока уязвимость будет проверена и будет принято решение о выплате. Решение при этом принимается наобум — сегодня за уязвимость могут заплатить, а через неделю она уже может показаться неинтересной. Размер выплаты мало предсказуем. Неприятие также вызывает последнее время раздуваемая маркетинговая шумиха вокруг уязвимостей — исследователи дают уязвимостям имена, создают сайты и логотипы, преувеличивают важность собственной работы и преподносят себя как спасителей мира.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.