Тринадцатого октября 2026 года Xen Project раскрыл девять уязвимостей в гипервизоре Xen, который запускает виртуальные машины на физическом сервере. Часть проблем позволяет непривилегированному гостю повысить права до уровня хоста, читать чужие данные или остановить машину целиком. Ещё одна открывает путь к исполнению кода с правами суперпользователя в служебном процессе хранилища. Набор затронутых версий зависит от компонента: часть ошибок касается только Arm, часть - только процессоров Intel, часть - серверов с памятью свыше 5 ТБ. Исправления подготовлены для стабильных ветвей Xen.
Уязвимости Xen в Xenstore, XPTI и таблице грантов
Сбой Xenstore при живом обновлении
Xenstore хранит конфигурацию гостей и управляющих инструментов, поэтому его отказ тормозит всю машину. При живом обновлении сервис переносят без перезапуска виртуальных машин, и в этот момент запись состояния теряет два байта. Новый экземпляр читает повреждённые данные, что приводит к падению или порче содержимого. Непривилегированный гость провоцирует сбой и блокирует дальнейшие операции управления доменами на хосте. Проблема есть только в Xen 4.22 с классической реализацией xenstore; альтернативный oxenstored ей не подвержен.
Перевёрнутое условие в защите от Zenbleed
Уязвимость Zenbleed в процессорах AMD Zen 2 известна с 2023 года, и Xen обходил её программно. При переработке этого механизма условие перевернули, поэтому защита включается не там, где нужна, и не срабатывает там, где нужна. На устаревшем микрокоде процессора злоумышленник читает данные из соседних контекстов на том же ядре: ключевой материал, содержимое шифрования через инструкции AES-NI, буферы операций копирования памяти. Уязвимы ветки 4.19.4, 4.20.3, 4.21.1 и 4.22 при условии, что микрокод не обновлялся с конца 2023 года. Свежая прошивка снимает проблему, а отключение AVX обходится слишком дорого по производительности.
XPTI на машинах с памятью больше 5 ТБ
Механизм XPTI изолирует таблицы страниц и защищает от атак класса Meltdown. Он копирует элементы таблиц гостя, читая их через прямое отображение памяти, которое не всегда покрывает весь объём. На серверах с памятью свыше 5 ТБ (3,5 ТБ для сборок со специальной опцией ядра) 64-битный гость с паравиртуализацией получает шанс на побег. Он может повысить права до уровня хоста, увидеть данные соседей или устроить отказ в обслуживании всей машины. Ошибка тянется с версии 4.7.5, куда перенесли соответствующую правку. Arm и гости других типов не затронуты.
Двойная смена версии таблицы грантов
Таблица грантов позволяет гостям передавать друг другу страницы памяти. Если интерфейс дважды меняет версию и возвращается к прежней, страницы состояния освобождаются и выделяются заново по другим адресам. Старые указатели на них остаются в силе, и работа с ними ломает логику гипервизора. Непривилегированный гость с несколькими виртуальными процессорами может повысить права до уровня хоста, вытащить чужие данные или вызвать отказ в обслуживании. Уязвимы все версии Xen с 4.0, если гостям разрешена вторая версия интерфейса на архитектуре x86.
Утечка ссылок при сбросе кэша
Обработчик сброса кэша в той же таблице грантов не освобождает ссылку на страницу, когда та принадлежит служебному системному домену. Ссылки накапливаются, и освободить память становится нельзя. Чаще всего это заканчивается отказом в обслуживании нулевого домена, то есть управляющей гостевой системы, от которой зависит весь хост. Уязвимы Xen с 4.5 по 4.20 на x86. Обходных мер вендор не предлагает.
Аварийный вход в гостя на процессорах Intel и VIA
На оборудовании с аппаратной виртуализацией VMX сочетание отладочного исключения, пошагового исполнения и заблокированного состояния процессора рушит вход в гостя. Ранее этот сценарий уже обходили стороной, но случай с включённой трассировкой ветвлений остался без правки. В результате пользовательский код HVM- и PVH-гостей вызывает аварийное завершение собственной виртуальной машины. Достаётся всему стеку Xen, но только на процессорах Intel, VIA и Zhaoxin; на AMD, Hygon и Arm проблемы нет.
Две ошибки в обработке кэша на Arm
На Arm в операциях сброса кэша через таблицу грантов нашлись два дефекта. Первый появился при исправлении более ранней уязвимости 2023 года: счётчик в расчёте уходит в минус, цикл выполняется непозволительно долго и в итоге валит гипервизор. Второй разрешает инвалидацию без очистки для грантовых отображений, доступных только на чтение, и портит чужую память. Непривилегированный гость останавливает всю машину или повреждает данные другого домена; повышение прав и утечки тоже не исключены. Уязвимы все версии Xen с 4.5 на Arm.
Выход за границы буфера в tapdisk
tapdisk реализует блочное устройство для гостей в стеке XAPI. При подключении стороны согласуют размер кольца из нескольких страниц, и проверки границ у tapdisk не было: разработчики считали, что запрошенный размер не превысит восьми. Гость с ошибкой в драйвере или злоумышленник вызывает переполнение стека, что ведёт к исполнению кода. Процесс работает с правами суперпользователя, поэтому последствия тяжёлые. Уязвимы все версии tapdisk, готовых обходных мер нет.
Что делать администраторам
Обновите Xen до последнего состояния стабильной ветви и установите свежий микрокод AMD: вместе это закрывает большинство перечисленных проблем. Пока обновление отложено, откажитесь от живого обновления xenstore или перейдите на oxenstored; ограничьте память, доступную гипервизору, до 5 ТБ, а для сборок со специальной опцией ядра до 3,5 ТБ; запретите гостям вторую версию таблицы грантов; на процессорах Intel, VIA и Zhaoxin запускайте только гостей с паравиртуализацией. Отключение AVX применимо лишь там, где микрокод обновить нельзя. Для ошибок Arm, утечки ссылок в таблице грантов и tapdisk обходных мер не существует.
Три уязвимости из девяти допускают выход с гостя на хост, и это самая весомая группа в нынешнем наборе. Показательнее другое: три проблемы выросли из прежних исправлений - защита от Zenbleed, правка сброса кэша на Arm и проверка в таблице грантов. Несколько находок сделали автоматические анализаторы, а диагноз как уязвимостей безопасности поставили специалисты Vates, Citrix и EPAM.
Ссылки
- https://xenbits.xen.org/xsa/advisory-521.html
- https://xenbits.xen.org/xsa/advisory-520.html
- https://xenbits.xen.org/xsa/advisory-519.html
- https://xenbits.xen.org/xsa/advisory-518.html
- https://xenbits.xen.org/xsa/advisory-517.html
- https://xenbits.xen.org/xsa/advisory-516.html
- https://xenbits.xen.org/xsa/advisory-515.html
- https://xenbits.xen.org/xsa/advisory-514.html