CVE-2026-64561 в Linux Kernel: нарушение инварианта shadow MMU в KVM x86

CVE: CVE-2026-64561
Продукт: Linux Kernel
Дата публикации: 04.08.2026
Критичность: HIGH
CVSS: 8.8 (3.1)
EPSS: 0,35%; процентиль 27,46%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В подсистеме KVM x86 обнаружена ошибка, нарушающая инвариант управления страницами shadow MMU. Дефект возникает из-за некорректного порядка проверок состояния корневых таблиц при обработке page fault, что приводит к попаданию недействительных страниц в список активных. Материал описывает механику срабатывания, условия эксплуатации и способы проверки исправления.

Основные характеристики​


Риск связан с нарушением внутренней логики виртуализации, что может повлиять на целостность данных и доступность сервисов на уровне ядра. Проблема актуальна только для систем, использующих KVM для виртуализации x86.

  • CVSS: 8.8 (HIGH). Вектор: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H. Оценивается как высокий риск при локальном доступе с низкими привилегиями.
  • EPSS: 0,35% (0.00347). Показатель отражает низкую вероятность эксплуатации в ближайшем будущем.
  • Тип ошибки: Нарушение инварианта (invariant violation) в управлении памятью shadow MMU.
  • Статус PoC: В пакете доказательств указан проект Zapscape, однако детали его функциональности и подтверждение эксплуатации в реальных атаках не раскрыты.

Какие продукты и версии затронуты​


Уязвимость затрагивает подсистему KVM в Linux Kernel для архитектуры x86. Дефект присутствует в ядрах, где реализован механизм отслеживания недействительных корневых таблиц и инвариант, запрещающий наличие недействительных страниц в списке активных MMU-страниц.

  • Версии ядра: Базовый дефект существует с 2008 года, но критическая уязвимость проявилась с версии 5.9 (2020), когда был добавлен инвариант для активных страниц.
  • Компоненты: arch/x86/kvm/mmu/mmu.c и arch/x86/kvm/mmu/paging_tmpl.h.
  • Платформы: Только системы с поддержкой KVM x86. Системы без виртуализации или использующие другие гипервизоры не затронуты.

Причина уязвимости​


Причина уязвимости заключается в некорректном порядке выполнения проверок в функции обработки page fault. Исходный код проверял состояние корневой таблицы на недействительность до вызова make_mmu_pages_available(). Если в процессе освобождения (reclaim) страниц корневая таблица была помечена как недействительная (zapped), последующее заполнение памяти в эту таблицу создавало дочерние страницы, унаследовавшие флаг invalid.

Это нарушало инвариант KVM, согласно которому недействительные страницы не должны присутствовать в списке активных MMU-страниц. Исправление переносит проверку is_page_fault_stale() на этап после make_mmu_pages_available(), что гарантирует прерывание обработки fault до создания дочерних страниц при обнаружении недействительного корня.

Как работает атака​


Атакующий с локальным доступом может инициировать сценарий, при котором в процессе работы виртуальной машины происходит освобождение shadow-страниц. Если в этот момент корневая таблица, используемая для текущего page fault, будет помечена как недействительная, KVM продолжит процесс маппинга памяти в эту таблицу.

Поскольку дочерние страницы наследуют роль (role) родителя, они создаются с флагом invalid. Эти страницы попадают в список активных MMU-страниц, нарушая инвариант. Последствия могут включать повреждение структуры данных, некорректную работу виртуальной памяти и потенциальный отказ в обслуживании или эскалацию привилегий.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости необходимо соблюдение следующих условий:

  • Система должна использовать KVM для виртуализации x86.
  • Атакующий должен иметь локальный доступ к системе с низкими привилегиями.
  • Должен быть активен процесс освобождения shadow-страниц (reclaim) в момент обработки page fault.
  • Корневая таблица shadow MMU должна быть помечена как недействительная в критический момент между проверкой и маппингом.

Возможный сценарий атаки​


Сценарий атаки начинается с запуска виртуальной машины, которая генерирует page fault. В этот момент в ядре происходит освобождение неиспользуемых shadow-страниц. Если атакующий может повлиять на тайминг или состояние памяти, чтобы корневая таблица была помечена как недействительная после первоначальной проверки, но до маппинга, KVM продолжит процесс.

Дочерние страницы создаются с флагом invalid и добавляются в список активных. Это нарушает инвариант и может привести к непредсказуемому поведению системы, включая падение ядра или компрометацию данных виртуальной машины.

Есть ли публичный эксплойт​


В пакете доказательств указан проект Zapscape как ссылка, связанная с CVE. Однако в предоставленных материалах отсутствуют детали о функциональности этого проекта, его статусе как PoC или подтверждении эксплуатации в реальных атаках. Массовое использование в wild не зафиксировано, что косвенно подтверждается низким значением EPSS (0,35%).

Признаки эксплуатации​


Специфичные IOC для этой уязвимости не опубликованы. Общие точки контроля (неспецифичные) включают:

  • Аномальные сбои или зависания виртуальных машин, использующих KVM.
  • Сообщения в журналах ядра (dmesg) о нарушениях инвариантов MMU или KVM.
  • Необычная активность процессов, связанных с виртуализацией, на хостах с KVM.

Как обнаружить атаку​


Для обнаружения потенциальной эксплуатации рекомендуется:

  • Мониторинг журналов ядра на ошибки, связанные с KVM и shadow MMU.
  • Анализ стабильности виртуальных машин: частые сбои или зависания могут указывать на нарушение инвариантов.
  • Использование инструментов аудита ядра для отслеживания аномальных операций с памятью в контексте виртуализации.

Как проверить свою версию​


Для проверки версии ядра и наличия исправления используйте следующие команды:

Bash:
uname -r
uname -a
cat /proc/version

Сравните версию с официальными релизами, содержащими коммиты исправления (например, 2abd5287f08319fa35764566b15c6e22cb1068db). Если версия ядра ниже той, где применено исправление, система уязвима.

Исправление​


Единственный надежный способ устранения уязвимости — обновление ядра до версии, содержащей исправление. Исправление переносит проверку is_page_fault_stale() на этап после make_mmu_pages_available(), что предотвращает создание недействительных дочерних страниц.

  • Обновите ядро до последней стабильной версии, содержащей коммит 2abd5287f08319fa35764566b15c6e22cb1068db.
  • Для дистрибутивов следуйте рекомендациям вендора по обновлению пакетов ядра.
  • После обновления перезагрузите систему для применения нового ядра.

Временные меры защиты​


Пока обновление не применено, можно снизить риск следующими мерами:

  • Ограничьте локальный доступ к системам, использующим KVM, до минимально необходимого уровня.
  • Отключите виртуализацию (KVM) на критических хостах, если это допустимо бизнес-процессами.
  • Усиленный мониторинг стабильности виртуальных машин и журналов ядра для раннего обнаружения аномалий.

Как проверить устранение уязвимости​


Для проверки применения исправления:

  • Убедитесь, что версия ядра соответствует или превышает версию, содержащую исправление.
  • Проверьте наличие коммита 2abd5287f08319fa35764566b15c6e22cb1068db в истории ядра (если доступно).
  • Проведите функциональное тестирование виртуальных машин для подтверждения стабильной работы KVM.
  • Проверьте журналы ядра на отсутствие ошибок, связанных с shadow MMU, после обновления.

Вывод​


CVE-2026-64561 представляет риск для систем, использующих KVM x86, из-за нарушения инварианта shadow MMU. Уязвимость требует локального доступа и специфических условий, но может привести к компрометации целостности данных и отказу в обслуживании.

Обновление ядра до версии с исправлением является обязательным шагом для защиты. Мониторинг и временные меры помогают снизить риск до применения патча.

Официальные источники​


  1. NVD — CVE-2026-64561
  2. FIRST EPSS — CVE-2026-64561
  3. KVM: x86: Check for invalid/obsolete root after making MMU pages available - kernel/git/stable/linux.git - Linux kernel stable tree
  4. KVM: x86: Check for invalid/obsolete root after making MMU pages available - kernel/git/stable/linux.git - Linux kernel stable tree
  5. KVM: x86: Check for invalid/obsolete root after making MMU pages available - kernel/git/stable/linux.git - Linux kernel stable tree
  6. KVM: x86: Check for invalid/obsolete root after making MMU pages available - kernel/git/stable/linux.git - Linux kernel stable tree
  7. KVM: x86: Check for invalid/obsolete root after making MMU pages available - kernel/git/stable/linux.git - Linux kernel stable tree
  8. KVM: x86: Check for invalid/obsolete root after making MMU pages available - kernel/git/stable/linux.git - Linux kernel stable tree
  9. KVM: x86: Check for invalid/obsolete root after making MMU pages available - kernel/git/stable/linux.git - Linux kernel stable tree
  10. CVEs — The Linux Kernel documentation

История обновлений статьи​


  • 12.08.2026 — Опубликована первая версия материала.
  • 22.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
  • 31.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ