6 августа 2026 года исследователь Hyunwoo Kim публично раскрыл Zapscape (CVE-2026-64561) — ошибку use-after-free в механизме shadow MMU гипервизора KVM/x86. Опубликованный PoC показывает полный путь от привилегированной гостевой машины с вложенной виртуализацией до выполнения команды на Linux-хосте с правами root. Исправление уже вошло в ядро Linux, а фактический статус защиты зависит от версии и пакетов конкретного дистрибутива.

Zapscape превращает вложенную виртуализацию в путь из гостевой VM к хосту
Zapscape затрагивает KVM — встроенный в ядро Linux механизм аппаратной виртуализации. Уязвимость проявляется в сценарии nested virtualization, когда одна виртуальная машина сама получает возможность запускать ещё одну VM. В такой схеме физический хост называют L0, первую гостевую систему — L1, а запущенную внутри неё машину — L2.
Именно между L1 и L2 KVM приходится вести дополнительные таблицы трансляции памяти. Исследователь Hyunwoo Kim показал, что специально сформированные действия внутри L1 способны нарушить работу этих таблиц и в итоге повредить память ядра L0. В публикации Zapscape автор описывает результат как guest-to-host escape: код из гостевой среды достигает хоста и выполняется с привилегиями ядра.
Такой сценарий особенно чувствителен для инфраструктуры, где вложенная виртуализация доступна арендаторам. Пользователь облачной VM обычно контролирует собственную гостевую систему с root-правами, поэтому требование высокого уровня привилегий внутри L1 само по себе не исключает облачный сценарий атаки.
Ошибка в shadow MMU оставляет KVM работать с уже недействительным корнем
Суть Zapscape находится в shadow MMU — программном механизме KVM, который отслеживает вложенные таблицы страниц и связывает адреса гостевых систем с памятью физического хоста. Ошибка появляется во время освобождения старых shadow pages, когда KVM пытается вернуть часть лимита страниц памяти.
До исправления KVM сначала проверял, остаётся ли текущий корень таблицы допустимым, а затем запускал процедуру освобождения страниц make_mmu_pages_available(). Во время этой процедуры используемый корень мог стать недействительным. После этого обработка page fault продолжалась с уже устаревшим корнем.
Новый дочерний shadow page наследовал признак недействительного родителя и при этом попадал в список активных MMU-страниц. Позже один и тот же элемент списка мог оказаться связан сразу с двумя списками, после освобождения памяти оставляя висячую ссылку. Исследователь довёл этот сбой до post-free write — записи через уже освобождённый объект.
Исправление 2abd5287f083 меняет порядок операций. Проверка устаревшего корня выполняется после освобождения MMU-страниц; если корень успел стать недействительным, KVM перезапускает обработку page fault через RET_PF_RETRY. Уязвимая цепочка в этот момент обрывается.
Публичный PoC дошёл до команды с root-правами на хосте
Публикация 6 августа отличается наличием полноценной демонстрационной цепочки. PoC рассчитан на AMD SVM/NPT и воспроизводится с Linux 7.1.3 в среде QEMU TCG. При успешном выполнении гостевой код создаёт на файловой системе хоста файл /Zapscape с владельцем root и режимом 0644.
QEMU в этой демонстрации служит средой для безопасного воспроизведения. Сам дефект находится в коде KVM внутри ядра Linux и срабатывает независимо от эмуляции QEMU. Поэтому исследователь связывает риск с любыми KVM/x86-платформами, где выполняются необходимые условия.
При этом опубликованный PoC описан автором как демонстрационный код. Для переноса цепочки в реальную облачную инфраструктуру действия L1 пришлось бы реализовать внутри гостевого модуля ядра и адаптировать эксплуатацию под конфигурацию ядра хоста и используемый memory backend. Публичных сообщений о применении Zapscape в реальных атаках на момент раскрытия нет.
AMD и Intel требуют разных условий для запуска Zapscape
На AMD публичная демонстрация использует nested SVM/NPT и не требует дополнительного аналога Intel EPT PWL5. На Intel условия уже: хост должен предоставлять L1 вложенный VMX/EPT, причём гостю должны быть доступны одновременно 4- и 5-уровневые варианты обхода таблиц EPT.
| Сценарий | Условия, описанные исследователем | Возможный результат |
| KVM escape на AMD | Nested virtualization и привилегии ядра в L1 | Выполнение кода на L0-хосте |
| KVM escape на Intel | Nested VMX/EPT, EPT PWL4 и PWL5 в L1, привилегии ядра в госте | Выполнение кода на L0-хосте |
| Локальное повышение привилегий | Доступ локального пользователя к /dev/kvm | Переход к root на самом Linux-хосте |
Hyunwoo Kim отдельно указывает на сценарий локального повышения привилегий в системах, где /dev/kvm доступен непривилегированным пользователям. Red Hat в карточке CVE-2026-64561 присвоил уязвимости предварительную оценку CVSS 3.1 в 7,0 балла и классифицировал проблему как CWE-825 — обращение к просроченному указателю.
Исправление появилось в Linux до публичного раскрытия Zapscape
История Zapscape развивалась несколько недель до публикации технических деталей. По хронологии исследователя, сообщение в security@kernel.org ушло 11 июля. 21 июля исправление вошло в mainline Linux. 1 августа информация и эксплойт были переданы в закрытый список linux-distros с пятидневным эмбарго, 4 августа уязвимость получила номер CVE-2026-64561, а 6 августа материалы появились публично.
Исследователь указывает диапазон затронутого кода от коммита f95eec9bed76 от 8 июля 2020 года до исправления 2abd5287f083 от 21 июля 2026 года. В описании Debian есть дополнительная деталь: логическая предпосылка с недействительными корнями существовала ещё с 2008 года, а эксплуатационно значимое состояние возникло после изменений 2020 года, вошедших в Linux 5.9.
Получается необычная последовательность: патч находился в mainline примерно две недели до момента, когда название Zapscape, CVE и рабочая демонстрационная цепочка стали публичными. После снятия эмбарго оценка риска перешла от анализа исправленного дефекта к проверке того, какие поставляемые ядра уже получили соответствующий backport.
Статус исправлений зависит от дистрибутива и его пакетов ядра
Картина по дистрибутивам уже различается. В актуальном Debian Security Tracker ветка trixie помечена исправленной в security-пакете 6.12.101-1, а sid — в 7.1.6-1. Для bullseye, bookworm и forky на момент проверки трекер продолжает показывать уязвимый статус соответствующих пакетов.
Версия ядра в строке пакета сама по себе даёт неполную картину. Производители корпоративных дистрибутивов часто переносят отдельные исправления в более старые ветки без перехода на новую upstream-версию, и Red Hat прямо описывает такую практику backporting в своей базе CVE.
Для инфраструктуры с KVM ключевым становится сочетание трёх факторов: присутствие исправления в конкретном пакете ядра, доступность nested virtualization для гостя и набор аппаратных возможностей, который KVM показывает L1. Именно это определяет фактическую поверхность атаки, а не одно только совпадение номера версии с тестовой системой из PoC.
После публикации PoC открытым остаётся реальный масштаб воздействия
К 7 августа стало известно о трёх фактах: Zapscape предоставляет возможность реализовать escape guest-to-host в KVM/x86, опубликован полный демонстрационный PoC, а исправление уже включено в ядро Linux с 21 июля. В отношении AMD исследователь продемонстрировал рабочую цепочку на Linux 7.1.3; для Intel было указано дополнительное условие — необходимость одновременной поддержки EPT PWL4 и PWL5.
Публичных подтверждений эксплуатации CVE-2026-64561 в реальных атаках пока нет. Неясным остаётся и фактическое число облачных и локальных KVM-инсталляций, где недоверенным L1-гостям доступна вложенная виртуализация с подходящей конфигурацией. После выхода PoC именно различия между upstream-ядром, backport-пакетами дистрибутивов и настройками гипервизоров определяют, насколько широко Zapscape затрагивает работающие системы.