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.
- Версия ядра содержит исходный баг до исправления.
Точные версии ядра и дистрибутивов в источниках не указаны.
Возможный сценарий атаки
Возможный сценарий выглядит так:
- На хосте запущена виртуальная машина с включённым SMM.
- KVM использует page tracking для контроля записей в guest memory.
- Один GFN становится write-tracked в одном address space, но не tracked в другом.
kvm_gfn_is_write_tracked()проверяет только переданный memslot и возвращает ложный результат.
mmu_try_to_unsync_pages()получает неверное состояние и помечает upper-level shadow page unsync.
- Выполнение доходит до BUG в
pte_list_remove().
- Хост может упасть или перейти в аварийное состояние.
Конкретные параметры guest, SMM и memory slots не раскрыты в источниках.
Есть ли публичный эксплойт
В предоставленных источниках нет отдельного PoC, эксплойта или подтверждённой эксплуатации. Есть только описание бага и фикс-коммиты.
Отсутствие сведений в пакете доказательств не означает отсутствие эксплойта. Однако по переданным данным нельзя утверждать наличие публичного эксплойта, его использование или конкретные последствия.
Исправление доступно через commits:
- upstream commit
- stable backport 1
- stable backport 2
- stable backport 3
- stable backport 4
- stable backport 5
Признаки эксплуатации
Специфичных 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-веток:
- 09aa68552d2542cc6c23edd1568ac265dc5d886f
- 429b6f43b4d8c98988fdca99e02dc156134e3d77
- c0a9bd5fca0b5f2dea32b0fc31350e71e8648112
- d8636c8f9f95d0fd1e2f6f1cad0d5757aa6f212a
- ec8fcaf354c1cbb36755d48e9f5a00c9591349e5
Рекомендуется обновить ядро до версии, содержащей соответствующий 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, если это возможно.
Официальные источники
- NVD — CVE-2026-98164
- KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
- KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
- KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
- KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
- KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
- KVM: x86/mmu: Check write tracking in all address spaces - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 01.10.2026 — Опубликована первая версия материала.
