Уязвимость Zapscape позволяет выйти из KVM-гостя на Linux-хост

В Linux KVM выявлена уязвимость Zapscape, получившая идентификатор CVE-2026-64561. Она позволяет злоумышленнику с привилегиями ядра в виртуальной машине L1 выйти за пределы изоляции KVM и выполнить код на хосте с правами ядра, то есть root. Предварительная оценка Red Hat составляет 7,0 балла по CVSS.
Проблема затрагивает KVM/x86 и его shadow MMU — механизм, управляющий теневыми таблицами страниц для трансляции памяти во вложенных гостевых системах. Риск возникает, когда хост предоставляет nested virtualization недоверенным гостевым машинам.
Как работает Zapscape
Исследователь Хёнву Ким описал ошибку как нарушение порядка проверки устаревшего корня в учёте shadow MMU. При обработке page fault KVM способен освободить страницы MMU и инвалидировать корневую страницу, которую текущая ветка обработки всё ещё использует.
После освобождения страниц код не выполнял повторную проверку корня и продолжал создавать дочерние теневые страницы под уже невалидным объектом. Они наследовали это состояние, но попадали в активный список страниц MMU. При последующей очистке один и тот же элемент списка мог оказаться связан с двумя списками, после чего страница освобождалась при сохранении устаревших ссылок. Это формирует dangling link и примитив записи после освобождения памяти.
Публичный proof-of-concept Кима строит цепочку эксплуатации, которая создаёт на уязвимом KVM-хосте файл /Zapscape, принадлежащий root. Демонстрация рассчитана на AMD nested SVM/NPT в Linux 7.1.3. Для безопасного тестирования исследователь советует QEMU TCG, но подчёркивает: QEMU не является уязвимым компонентом, поскольку ошибка находится в KVM в ядре Linux и срабатывает независимо от эмуляции QEMU.
Кому необходимо обновиться
Для атаки обычно требуются права ядра в L1-госте, фактически root. На Intel дополнительно необходимо предоставить L1-гостю EPT page-walk длиной 4 и 5; у AMD такого эквивалентного условия нет. Ким не заявлял об эксплуатации уязвимости в реальных атаках и отмечал, что облачный сценарий требует адаптации к конфигурации ядра хоста и бэкенду памяти.
В National Vulnerability Database указано, что затронуты Linux 5.9 и более поздние версии до исправленных стабильных релизов, включая 6.6.148, 6.12.101, 6.18.42, 7.1.6 и 7.2-rc5. Debian на 6 августа считал уязвимыми пакеты bullseye, bookworm, trixie и forky, а sid — исправленным в версии 7.1.6-1.
Разработчики приняли исправление в коммите 2abd5287f083: проверка stale root теперь выполняется после make_mmu_pages_available(). Если освобождение памяти инвалидирует текущий корень, KVM перезапускает обработку сбоя через RET_PF_RETRY, а не продолжает отображение или чтение через невалидный объект.
Практический вывод
Администраторам следует определить KVM-хосты, где вложенная виртуализация доступна недоверенным арендаторам или рабочим нагрузкам, и установить стабильное ядро с патчем либо пакет поставщика с бэкпортом. При оценке риска полезно учитывать границы доверия между изолированными средами как пример того, почему границы доверия между изолированными средами требуют отдельной проверки.
Нельзя ориентироваться только на номер upstream-версии: Red Hat отдельно предупреждает, что исправления нередко переносятся в пакеты без обновления до нового релиза ядра. Поэтому финальным шагом должна быть проверка статуса конкретного пакета в трекере используемого дистрибутива.

