Zapscape (CVE-2026-64561): побег из виртуалки в ядро хоста — что делать владельцу гипервизора

4 августа в базе NVD появилась запись CVE-2026-64561, а 6 августа исследователь опубликовал разбор и proof-of-concept под именем Zapscape. Суть в одной строке: гость с правами root внутри виртуальной машины при определённых условиях может выполнить код в ядре хоста или уронить его целиком — вместе со всеми соседними ВМ.

Ниже — разбор в формате «вопрос — ответ». Вопросы взяты те, которые реально задают админы, а не те, которые красиво смотрятся в пресс-релизе.


Что вообще сломалось?

Официальная формулировка из ядерного changelog звучит так: «KVM: x86: Check for invalid/obsolete root after making MMU pages available». По-человечески: в теневом MMU (shadow MMU) подсистемы KVM/x86 порядок двух проверок оказался перепутан.

Когда KVM не хватает страниц для теневых таблиц, он запускает reclaim — освобождает страницы. Этот процесс может пометить текущий корневой каталог таблиц как невалидный. Проблема в том, что проверка «а корень ещё живой?» выполнялась до reclaim, а не после. В результате KVM продолжал работать с уже освобождённым корнем и мог писать в освобождённую память — классический use-after-free.

Нарушался и внутренний инвариант: невалидная страница не должна оказываться в списке активных, а тут к ней спокойно прицеплялись дочерние теневые страницы.

Info:

Ошибка живёт в ядре с коммита f95eec9bed76 от 8 июля 2020 года, то есть примерно с Linux 5.9. Исправлена коммитом 2abd5287f083, попавшим в upstream 21 июля 2026 года. Пять лет тихой жизни — обычная биография для бага в MMU.

Насколько это страшно по цифрам?

Red Hat в предварительной оценке поставил CVSS 3.1 = 7.0 и классифицировал как Important, CWE-825 (Expired Pointer Dereference). NVD на момент публикации этой заметки собственный балл ещё не проставил — в карточке CVE все три поля CVSS пустые.

Так что 7.0 — это оценка одного вендора, а не консенсус. Но практический потолок воздействия описан прямо в публикации исследователя: DoS всего физического сервера или выполнение кода с правами root на хосте.

Меня это касается? Условия срабатывания

Здесь и находится главное, что отличает Zapscape от «очередной CVE в ядре». Атака требует вложенной виртуализации: атакующему нужны права уровня ядра внутри гостевой ВМ (L1), чтобы поднять внутри неё ещё одну ВМ (L2) и через неё дотянуться до теневого MMU хоста.

Дальше начинаются архитектурные нюансы:

  • AMD (SVM/NPT) — путь прямой, дополнительных условий нет.
  • Intel (EPT) — гостю L1 должны быть отданы обе длины обхода страниц, 4-уровневая и 5-уровневая. Это заметно сужает поверхность: пятиуровневые таблицы — это Ice Lake-SP и новее.

Warning:

Отдельная, независимая от вложенности дорожка — машины, где /dev/kvm открыт всем подряд (права 0666). Там это работает уже не как побег из ВМ, а как локальное повышение привилегий: любой пользователь на хосте может дойти до ядра. Проверить: ls -l /dev/kvm.

Как понять за минуту, включена ли у меня вложенность?

# Intel
cat /sys/module/kvm_intel/parameters/nested
# AMD
cat /sys/module/kvm_amd/parameters/nested
# Y или 1 — модуль вложенность разрешает

Важная тонкость: разрешение на уровне модуля ещё не значит, что конкретный гость её получил. Гостю нужен флаг vmx (Intel) или svm (AMD) в его виртуальном CPU. В Proxmox это происходит, когда типом процессора выбран host или флаг добавлен явно. Проверить изнутри гостя:

grep -oE '(vmx|svm)' /proc/cpuinfo | sort -u

Пусто — значит, этой ВМ вложенность не отдана, и вектор L1 → L2 для неё закрыт.

Какие ядра уже исправлены?

По данным NVD, фикс вошёл в стабильные ветки 6.6.148, 6.12.101, 6.18.42, 7.1.6 и в 7.2-rc5. Релиз LTS-ядер 6.18.42 / 6.12.101 / 6.6.148 подтверждён независимо в анонсах stable-веток.

Для дистрибутивов: по публикации TuxCare, RHEL 8 закрыт начиная с 4.18.0-553.147.1.el8_10 (23 июля), RHEL 9 — с 5.14.0-687.30.1.el9_8 (22 июля).

По Proxmox: в официальном форуме сотрудник компании назвал исправленные сборки — proxmox-kernel-6.8.12-40-pve и ядро 7.0.14-9 — и подтвердил, что пакеты выложены в pve-no-subscription.

Success:

Порядок действий для владельца гипервизора:

  1. uname -r — сравнить с номерами выше.
  2. apt update && apt full-upgrade (или dnf update), затем перезагрузка: ядро на лету не подменяется, если у вас нет live-patching.
  3. На Proxmox — pveversion -v и проверить, что загрузилось именно новое ядро, а не старое из первой позиции загрузчика.
  4. ls -l /dev/kvm — права должны быть 660 root:kvm, а не 666.

А если обновиться прямо сейчас нельзя?

Самое прямое временное решение — убрать условие срабатывания, то есть отключить вложенную виртуализацию:

# /etc/modprobe.d/kvm-nested.conf
options kvm_intel nested=0
# или
options kvm_amd nested=0

Затем update-initramfs -u и перезагрузка (либо выгрузка/загрузка модуля, если ни одна ВМ не запущена).

Error:

Не считайте отключение вложенности заменой обновлению. Это снятие одного условия эксплуатации, а не устранение use-after-free. Второй путь — через открытый /dev/kvm — этой мерой не закрывается вообще.

Побочный эффект честно: у вас перестанут работать вложенные гипервизоры, Docker Desktop и WSL2 внутри ВМ, Android-эмуляторы с аппаратным ускорением и любые тестовые стенды «Proxmox внутри Proxmox». Для большинства домашних лаб это терпимо на несколько дней, для CI-фермы — нет.

Есть ли эксплуатация «в дикой природе»?

На момент публикации подтверждённых случаев не сообщалось. PoC опубликован, но, по описанию самого исследователя, требует адаптации под конкретную цель — это не «скачал и запустил».

Important:

Практический вывод: паника не нужна, но и «подожду до следующего окна обслуживания» — плохая ставка, если вы сдаёте мощности другим людям. Формула риска простая: чужой root внутри вашей ВМ + отданная ему вложенность = обновляйтесь сегодня. Все ВМ ваши и вложенность не используется — обновляйтесь в плановом порядке.

Что это говорит об аренде VPS вообще

Полезное напоминание для тех, кто арендует: изоляция ВМ — это гарантия, которая держится на коде гипервизора, а он такой же смертный, как и всё остальное. Соседа по железу вы не выбираете и не проверяете.

Отсюда два практических следствия. Первое: то, что не должно утечь никогда — ключи, бэкапы, база с персональными данными — лучше держать на шифрованных томах, которые не смонтированы постоянно, чтобы дамп памяти хоста дал злоумышленнику меньше. Второе: спрашивайте у хостера политику обновления ядер. Провайдер, который перезагружает гипервизоры раз в полгода, — это отдельный класс риска, никак не отражённый в цене.


Источники

Question:

Отключали ли вы вложенную виртуализацию на своих хостах — и что при этом отвалилось? И отдельный вопрос к тем, кто арендует VPS: ваш хостер вообще как-то уведомляет о перезагрузках гипервизора ради ядерных патчей, или вы узнаёте об этом по графику аптайма?