Уязвимость в 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.
Решение опубликовать сведения об уязвимости не дожидаясь исправления связаны с неприятием сложившейся практики в области связанных с безопасностью исследований и негативным опытом информирования о прошлых уязвимостах. Исследователям приходится ждать по полгода, пока будет исправлена уязвимость, а также возникает неопределенность при участии в программах выплаты вознаграждений за выявление уязвимостей. При участии в подобных программах приходится более месяца ждать пока уязвимость будет проверена и будет принято решение о выплате вознаграждения. Решение при этом принимается наобум - сегодня за уязвимость могут заплатить, а через неделю она уже может показаться неинтересной. Размер выплаты также мало предсказуем. Неприятие также вызывает последнее время раздуваемая маркетинговая шумиха вокруг уязвимостей - исследователи дают уязвимостям имена, создают сайты и логотипы, преувеличивают важность собственной работы и преподносят себя как спасителей мира.