CVE-2026-98164 в Linux Kernel: KVM SMM, write tracking и сбой pte_list_remove

CVE: CVE-2026-98164
Продукт: Linux Kernel
Дата публикации: 29.09.2026
Критичность: не определена
CVSS: нет данных
EPSS: нет данных; процентиль нет данных
CISA KEV: нет подтверждения в каталоге CISA KEV

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


Уязвимость затрагивает x86 KVM при включённом SMM. Функция kvm_gfn_is_write_tracked() проверяла только переданный memslot, тогда как page tracking ведётся по каждому address space, а shadow pages общие для всех адресных пространств.

В результате GFN мог быть write-tracked в одном адресном пространстве и выглядеть untracked через другое. Это позволяло mmu_try_to_unsync_pages() пометить верхний shadow page unsync и довести выполнение до BUG в pte_list_remove().

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


Риск связан с внутренним состоянием KVM-гипервизора на x86 при работе с SMM. Сбой проявляется как нарушение инварианта page tracking и последующий сбой через BUG в pte_list_remove().

  • Тип проблемы: логическая ошибка проверки write tracking в KVM x86/mmu.
  • Компонент: arch/x86/kvm/mmu/page_track.c, функции kvm_gfn_is_write_tracked() и mmu_try_to_unsync_pages().
  • Условие активации: включён SMM, задействованы два address space, shadow pages общие.
  • CVSS: данные в источниках не заполнены.
  • EPSS: данные в источниках не заполнены.
  • Статус CVE: Awaiting Analysis.

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


Пакет доказательств не содержит списка конкретных версий Linux Kernel, дистрибутивов или пакетов. Из commits видно, что исправление попадает в stable tree и адаптировано под разные ветки: есть upstream commit 0f38453cdb2e17566ccb7c0f3dabd5bd21caca26, а также backport-версии для разных stable-веток.

Из доступных данных можно сделать вывод, что затронуты версии Linux Kernel с включённым SMM в KVM и с функцией page tracking по address spaces. Точный диапазон версий из переданного пакета не раскрыт.

  • Версия ядра: не подтверждена конкретными номерами в источниках.
  • Дистрибутивы: не перечислены.
  • Компонент: arch/x86/kvm/mmu/page_track.c.
  • Конфигурация: требуется поддержка SMM и page tracking в KVM.

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


Функция kvm_gfn_is_write_tracked() проверяла только переданный memslot. Page tracking при этом привязан к конкретному address space, а shadow pages могут быть общими для всех address spaces.

При включённом SMM один GFN может быть write-tracked в одном адресном пространстве и выглядеть untracked через другое. Проверка только одного слота давала ложный результат: страница считалась не отслеживаемой по записям, хотя по факту tracking был активен.

Это нарушало логику mmu_try_to_unsync_pages(). Функция могла пометить верхний shadow page unsync и довести выполнение до BUG в pte_list_remove().

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


Механика связана с внутренним состоянием KVM-гипервизора. Атакующий не обязан иметь прямой доступ к ядру, если может управлять виртуальной машиной или запускать её на хосте с уязвимой версией.

Сценарий строится вокруг SMM и двух address spaces:

  • KVM использует page tracking для контроля записей в guest memory.
  • Shadow pages могут быть общими для нескольких address spaces.
  • kvm_gfn_is_write_tracked() проверяет только переданный memslot.
  • Если GFN tracked в одном адресном пространстве, но не tracked в другом, функция возвращает неверный результат.
  • mmu_try_to_unsync_pages() получает неверное состояние и может пометить upper-level shadow page unsync.
  • Далее срабатывает BUG в pte_list_remove().

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


Для воспроизведения проблемы нужны следующие условия:

  • x86-архитектура хоста.
  • Включён KVM.
  • Включена поддержка SMM в KVM.
  • Используется page tracking по address spaces.
  • Есть два address space, где GFN может иметь разное состояние write tracking.
  • Версия ядра содержит исходный баг до исправления.

Точные версии ядра и дистрибутивов в источниках не указаны.

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


Возможный сценарий выглядит так:

  1. На хосте запущена виртуальная машина с включённым SMM.
  2. KVM использует page tracking для контроля записей в guest memory.
  3. Один GFN становится write-tracked в одном address space, но не tracked в другом.
  4. kvm_gfn_is_write_tracked() проверяет только переданный memslot и возвращает ложный результат.
  5. mmu_try_to_unsync_pages() получает неверное состояние и помечает upper-level shadow page unsync.
  6. Выполнение доходит до BUG в pte_list_remove().
  7. Хост может упасть или перейти в аварийное состояние.

Конкретные параметры guest, SMM и memory slots не раскрыты в источниках.

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


В предоставленных источниках нет отдельного PoC, эксплойта или подтверждённой эксплуатации. Есть только описание бага и фикс-коммиты.

Отсутствие сведений в пакете доказательств не означает отсутствие эксплойта. Однако по переданным данным нельзя утверждать наличие публичного эксплойта, его использование или конкретные последствия.

Исправление доступно через commits:


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


Специфичных IOC для этой проблемы в источниках нет. Ниже приведены неспецифичные признаки, которые можно проверить как общие точки контроля.

  • Падение хоста с сообщением о BUG в pte_list_remove().
  • Ошибки KVM или x86/mmu в journalctl или dmesg.
  • Нестабильность виртуальных машин с включённым SMM.
  • Внезапные kernel panic на хостах с KVM.
  • Аномальные записи о page tracking или shadow pages в отладочных логах.

Эти признаки не являются уникальными для CVE-2026-98164 и могут возникать при других сбоях ядра.

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


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

  • Проверить версию ядра на наличие исправления.
  • Посмотреть dmesg и journalctl на ошибки KVM, x86/mmu или pte_list_remove.
  • Проверить, включён ли SMM в KVM.
  • Проверить, используется ли page tracking по address spaces.
  • Мониторить стабильность виртуальных машин с включённым SMM.

Команды проверки:

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

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


Проверка версии ядра выполняется стандартными командами.

  • uname -r — показывает краткую версию ядра.
  • uname -a — показывает полную информацию о ядре и системе.
  • cat /proc/version — показывает версию ядра из /proc.

Для проверки наличия исправления нужно сопоставить версию с release notes дистрибутива или stable-веткой. Конкретные версии с фиксом в источниках не указаны.

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


Исправление доступно через commits в Linux kernel stable tree.

Основной upstream commit:


Backport-версии для разных stable-веток:


Рекомендуется обновить ядро до версии, содержащей соответствующий backport для вашей stable-ветки.

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


Временные меры:

  • Отключить SMM в KVM, если это возможно.
  • Ограничить использование виртуальных машин с включённым SMM.
  • Перенести критичные VM на хосты с обновлённым ядром.
  • Мониторить dmesg и journalctl на ошибки KVM и pte_list_remove.

Отключение SMM может повлиять на функциональность, если она используется в VM. Проверьте зависимости от SMM перед отключением.

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


После обновления ядра нужно проверить:

  • Версию ядра с помощью uname -r.
  • Наличие исправления в release notes дистрибутива.
  • Отсутствие ошибок KVM и pte_list_remove в логах.
  • Стабильность виртуальных машин с включённым SMM.

Команды:

Bash:
uname -r
dmesg | grep -i kvm
dmesg | grep -i pte_list_remove
journalctl -k | grep -i kvm

Вывод​


CVE-2026-98164 — это логическая ошибка в KVM x86/mmu, связанная с проверкой write tracking при включённом SMM. Проблема может приводить к BUG в pte_list_remove() и падению хоста.

Исправление доступно через commits в stable tree. Точные версии ядра и дистрибутивов не указаны в источниках. Для защиты нужно обновить ядро до версии с соответствующим backport или временно отключить SMM, если это возможно.

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


  1. NVD — CVE-2026-98164
  2. KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
  3. KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
  4. KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
  5. KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
  6. KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
  7. KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
  8. CVEs — The Linux Kernel documentation

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


  • 01.10.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ