Кэш трансляции адресов в подсистеме vhost ядра Linux ведёт к повышению привилегий и выходу из виртуальной машины

linux

Подсистема vhost ускоряет ввод-вывод виртуальных машин: очереди виртуальных устройств обрабатываются в ядре хоста, а не в эмуляторе. Ошибка в работе с кэшем адресов этих очередей позволяет локальному пользователю получить права root, а в окружении с виртуальным IOMMU - повлиять на память процесса, обслуживающего гостевую систему. Затронуты ядра Linux начиная с версии 4.11, в том числе ветки, на которых построены Ubuntu, RHEL, Amazon Linux, Azure Linux и Oracle Linux. Прототип эксплойта (рабочий образец кода, использующий уязвимость) для получения root опубликован и проверен на этих дистрибутивах.

CVE-2026-74580 и устаревший кэш адресов очередей

Виртуальная очередь (vring) состоит из трёх областей памяти: таблицы дескрипторов, кольца доступных буферов и кольца использованных. Эмулятор передаёт ядру адреса этих областей управляющими вызовами. Если к устройству подключён IOMMU - таблица трансляции адресов ввода-вывода, - проверка откладывается до первого обращения, а её результат попадает в кэш.

Кэш сбрасывается при обновлении таблицы трансляции, при её инициализации и при сбросе очереди. Перенастройка адресов и размера очереди в этот список не входит. Поэтому ядро пересчитывает новый адрес по старой записи, которая этот адрес уже не покрывает. Копирование идёт без повторной проверки и попадает в память за пределами разрешённой области.

Оценка по шкале CVSS 3.1 - 8.8 из 10, уровень High. Её приводит организация, которая ведёт записи CVE для ядра Linux. Атака локальная: сетевой доступ не нужен, участие пользователя не требуется. Хватает прав обычного пользователя и возможности открыть узел устройства vhost.

После заполнения кэша каждое изменение адреса очереди даёт одно чтение или одну запись памяти ядра по выбранному адресу. Состояние гонки не нужно, подбор раскладки объектов ядра тоже. Чтение возвращает восемь байт из произвольного адреса, запись позволяет переписать указатель. Этого достаточно, чтобы обойти случайное размещение ядра в памяти (KASLR) и подменить служебную переменную с путём к обработчику загрузки модулей. Подставной обработчик запускается с правами root.

Второй сценарий - атака из гостевой системы. Когда виртуальное устройство размещено за виртуальным IOMMU, гостевые адреса транслируются в адреса хоста по таблице. Гость сбрасывает и заново включает очередь, эмулятор в ответ снова задаёт адреса, а кэш остаётся прежним. В итоге ядро хоста записывает элементы кольца использованных буферов в память процесса эмулятора за пределами области гостя. Смещение выбирает гость, поэтому запись попадает в нужный объект эмулятора и подменяет указатель на функцию, которую тот вызывает. Сценарий работает при включённом режиме платформенного доступа к памяти устройства.

Исправление вошло в основную ветку ядра коммитом de845981da67. При перенастройке очереди кэш сбрасывается, и новые адреса проходят обычную проверку. Первые исправленные стабильные выпуски - 5.10.265, 5.15.216, 6.1.183, 6.6.152, 6.12.104, 6.18.45, 7.1.9 и 7.2. Ядра Amazon Linux 6.1.180 и Azure Linux 6.6.150, на которых работал прототип, старше этих выпусков. Amazon Linux и Oracle Linux уже выпустили уведомления и исправления. В записи CVE диапазоны версий противоречат друг другу, поэтому ориентиром служит список исправленных выпусков.

Обновление ядра требует перезагрузки: уязвимость живёт в работающем ядре. Пока новая версия не установлена, доступ к устройствам vhost нужно ограничить. Речь о узлах /dev/vhost-net, /dev/vhost-vsock, /dev/vhost-scsi и /dev/vhost-vdpa-*. В части дистрибутивов они открыты на чтение и запись всем пользователям, и тогда уязвимость использует любой локальный пользователь. Снимите права для остальных, оставьте узел только доверенным службам виртуализации и не передавайте его в контейнеры. Членство в группе kvm на таком хосте фактически даёт привилегии.

На Ubuntu 26.04 прототип запускали от пользователя из группы kvm, на других проверенных системах - от обычного пользователя. Разница в доступе к узлу устройства определила охват, а не качество эксплуатации. Сведений об эксплуатации в реальных атаках источники не приводят: известен только прототип, проверенный на тестовых системах. Пока ядро не обновлено, хосты виртуализации с открытыми узлами vhost остаются под риском.

Ссылки

Комментарии: 0