Уязвимость, позволяющая выйти из изолированного окружения QEMU

Раскрыты детали критической уязвимости (CVE-2019–14378) в обработчике SLIRP, по умолчанию применяемом в QEMU для организации канала связи между виртуальным сетевым адаптером в гостевой системе и сетевым бэкендом на стороне QEMU. Проблема также затрагивает системы виртуализации на базе KVM (в режиме Usermode) и Virtualbox, в которых используются бэкенд slirp из QEMU, а также приложения, применяющие сетевой стек в пространстве пользователя libSLIRP (эмулятор TCP/IP).

Уязвимость позволяет добиться выполнение кода на стороне хост-системы с правами процесса-обработчика QEMU при отправки со стороны гостевой системы специально оформленного очень большого сетевого пакета, для которого требуется проведение фрагментации. Из-за ошибки в функции ip_reass (), вызываемой при пересборке входящих пакетов, первый фрагмент может не уместится в выделенный буфер и его хвост будет записан в следующие за буфером области памяти.

Для тестирования уже доступен рабочий прототип эксплоита, в котором предусмотрен обход ASLR и выполнение кода через перезапись памяти массива main_loop_tlg, включающий список QEMUTimerList с обработчиками, вызываемыми по таймеру. Уязвимость уже устранена в Fedora и SUSE/openSUSE, но остаётся неисправленной в Debian, Arch Linux и FreeBSD. В Ubuntu и RHEL проблема не проявляется из-за неиспользования slirp. Уязвимость остаётся неисправленой в последнем выпуске libslirp 4.0 (исправление пока доступно в виде патча).

© OpenNet