CVE: CVE-2026-97433
Продукт: Linux Kernel
Дата публикации: 24.09.2026
Критичность: HIGH
CVSS: 8.2 (3.1)
EPSS: 0,32%; процентиль 22,19%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В Linux Kernel уязвимость CVE-2026-97433 связана с обработкой FDP configuration log в драйвере NVMe хоста. В функции nvme_query_fdp_granularity невалидация размера дескриптора могла приводить к бесконечной итерации или чтению за пределами буфера. Исправление добавляет проверку dsze до смещения указателя.
Основные характеристики
Ошибка находится в драйвере NVMe хоста Linux Kernel и затрагивает обработку FDP configuration log. Неправильный размер дескриптора не проверялся до изменения позиции обхода, из-за чего цикл мог не продвигаться или читать память вне ожидаемого буфера.
- Компонент: драйвер NVMe хоста, файл
drivers/nvme/host/core.c.
- Функция:
nvme_query_fdp_granularity().
- CVSS 3.1:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H, оценка 8.2, severity HIGH.
- EPSS: 0,319%, процентиль 22,19%.
- Статус в NVD: Received.
- Исправление: коммит
0ef4daa6534a510d61ea67c8ad9bb5097b0dd5f8и stable backport97efd7a41aac08b43ea2337c5913a2bc75484f9f.
Какие продукты и версии затронуты
Затронут Linux Kernel с компонентом драйвера NVMe хоста.
Изменённый файл:
drivers/nvme/host/core.c
Функция:
nvme_query_fdp_granularity()
Исправление внесено в стабильное дерево ядра коммитом 0ef4daa6534a510d61ea67c8ad9bb5097b0dd5f8 и в ветку stable коммитом 97efd7a41aac08b43ea2337c5913a2bc75484f9f.
В предоставленных источниках нет списка конкретных версий ядра, которые содержат ошибку или уже исправлены. Версию ядра нужно проверять локально и сопоставлять с веткой stable или дистрибутивным пакетом ядра.
Причина уязвимости
Ошибка возникает в цикле обхода FDP configuration descriptors внутри функции
nvme_query_fdp_granularity.Прежде исправления код выполнял:
C:
log += le16_to_cpu(desc->dsze);
desc = log;
if (log >= end) {
dev_warn(ctrl->device,
"FDP invalid config descriptor list\n");
ret = 0;
goto out;
}
После исправления код проверяет размер до сдвига указателя:
C:
u16 dsze = le16_to_cpu(desc->dsze);
if (!dsze || log + dsze > end) {
dev_warn(ctrl->device,
"FDP invalid config descriptor at index %d\n", i);
ret = 0;
goto out;
}
log += dsze;
desc = log;
Нарушенная проверка — отсутствие валидации
dsze == 0 и отсутствия проверки, что log + dsze > end. Если размер равен нулю, указатель не смещается. Если размер указывает за пределы лога, следующий дескриптор читается вне ожидаемого буфера.Исправление добавляет проверку до изменения позиции обхода.
Как работает атака
Цель атаки — повлиять на ядро через драйвер NVMe при обработке FDP configuration log.
Путь данных:
- NVMe устройство предоставляет лог FDP configurations.
- Ядро вызывает
nvme_query_fdp_granularity()для анализа этого лога.
- Код обходит дескрипторы по указателю
logдо границыend.
- Размер каждого дескриптора берётся из поля
desc->dsze.
- Если размер невалиден, указатель смещается за пределы буфера или остаётся на месте.
До исправления:
- при
dsze == 0указатель не двигался; цикл мог продолжать обход без продвижения по логу;
- при большом значении
dszeследующий дескриптор читался за пределами конца лога.
После исправления:
- размер сохраняется в локальную переменную
u16 dsze;
- проверяется условие
!dsze || log + dsze > end;
- при нарушении условия функция завершает обработку с предупреждением и кодом возврата 0.
В предоставленных источниках нет описания способа доставки невалидного лога от устройства или пользователя. Механика ограничена внутренним обработчиком драйвера NVMe.
Условия успешной эксплуатации
Для анализа ошибки нужны:
- система с ядром Linux, использующим драйвер NVMe хоста;
- наличие в ядре кода функции
nvme_query_fdp_granularityиз файлаdrivers/nvme/host/core.c;
- доступ к обработке FDP configuration log внутри драйвера NVMe.
В источниках нет подтверждённого способа удалённой доставки невалидных данных от внешнего устройства или пользователя. Поэтому конкретные условия эксплуатации за пределами кода не раскрыты.
Для проверки версии ядра можно использовать:
Bash:
uname -r
или:
Bash:
uname -a
и:
Bash:
cat /proc/version
Возможный сценарий атаки
Сценарий ограничен техническим описанием ошибки.
- NVMe устройство или внутренний механизм ядра вызывает обработку FDP configuration log.
- В логе присутствует дескриптор с невалидным размером
dsze.
- Код до исправления не проверял размер перед смещением указателя.
- Указатель мог остаться на месте при нулевом размере или перейти за границу буфера.
- Это могло привести к бесконечной итерации или чтению памяти вне ожидаемого буфера.
В предоставленных источниках нет описания внешнего сценария: нет указания, кто может контролировать лог FDP, какой тип устройства требуется и какие параметры нужно передать. Поэтому сценарий остаётся на уровне кода драйвера.
Есть ли публичный эксплойт
В предоставленных источниках нет публичного эксплойта.
Источники содержат:
- описание ошибки;
- коммит исправления в стабильном дереве ядра;
- дифф изменения в
drivers/nvme/host/core.c;
- метрики CVSS и EPSS.
Отсутствие публичного эксплойта в источниках не означает, что эксплуатация невозможна. Оно означает только, что в предоставленном пакете доказательств нет отдельного PoC, рабочего кода или подтверждённого случая эксплуатации.
Признаки эксплуатации
Специфичных IOC для CVE-2026-97433 в источниках нет.
Неспецифичные точки контроля:
- неожиданные сообщения
FDP invalid config descriptorилиFDP invalid config descriptor listв ядре;
- аномальные задержки или зависания при инициализации NVMe устройств;
- нехарактерная активность драйвера NVMe в журналах системы;
- изменения в файле
drivers/nvme/host/core.cотносительно стабильной ветки.
Эти признаки не являются подтверждёнными признаками эксплуатации конкретной уязвимости. Они подходят только для общей диагностики проблем с NVMe.
Как обнаружить атаку
Для обнаружения можно использовать:
- проверку версии ядра и наличие исправленного кода в файле
drivers/nvme/host/core.c;
- поиск строки предупреждения
FDP invalid config descriptor at index %dв логах ядра;
- сравнение локального файла с веткой stable или дистрибутивным пакетом ядра.
Команды проверки:
Bash:
uname -r
Bash:
cat /proc/version
Для поиска предупреждений можно использовать:
Bash:
grep "FDP invalid config descriptor" /var/log/messages
или:
Bash:
dmesg | grep "FDP invalid config descriptor"
Эти команды не являются подтверждёнными средствами обнаружения эксплуатации. Они помогают проверить наличие сообщений, связанных с обработкой FDP log.
Как проверить свою версию
Проверка версии ядра:
Bash:
uname -r
Полная информация о ядре:
Bash:
uname -a
Альтернативный способ:
Bash:
cat /proc/version
Для проверки, применён ли коммит исправления, нужно сравнить локальный файл
drivers/nvme/host/core.c с веткой stable или дистрибутивным пакетом ядра.В предоставленных источниках нет команды для автоматической проверки наличия конкретного коммита. Можно использовать:
Bash:
git log --oneline | grep 0ef4daa6534a510d61ea67c8ad9bb5097b0dd5f8
в исходном дереве ядра, если оно доступно.
Исправление
Исправление состоит из коммита в стабильном дереве ядра:
Изменённый файл:
Код:
drivers/nvme/host/core.c
Исправление добавляет проверку размера дескриптора до смещения указателя.
Для применения исправления нужно обновить ядро до версии, содержащей коммит
97efd7a41aac08b43ea2337c5913a2bc75484f9f или более новый стабильный релиз.В предоставленных источниках нет списка дистрибутивных пакетов ядра с исправлением. Нужно проверить локальный пакет ядра через систему управления пакетами дистрибутива.
Временные меры защиты
В предоставленных источниках нет временных мер защиты.
Общие защитные выводы:
- ограничить доступ к NVMe устройствам, если это возможно в конкретной конфигурации;
- отключать функции FDP, если они не используются; однако в источниках нет подтверждения, что отключение FDP полностью исключает обработку лога драйвером;
- обновить ядро до версии с исправлением как основной способ.
Эти меры не являются подтверждёнными временными защитами для CVE-2026-97433. Они основаны на общем понимании области обработки NVMe.
Как проверить устранение уязвимости
После обновления нужно проверить:
- версию ядра;
- наличие исправленного кода в
drivers/nvme/host/core.c;
- отсутствие предупреждений
FDP invalid config descriptor listи появление нового сообщенияFDP invalid config descriptor at index %dпри невалидных данных, если они присутствуют.
Команды:
Bash:
uname -r
Bash:
grep -A 5 "nvme_query_fdp_granularity" /lib/modules/$(uname -r)/kernel/drivers/nvme/host/core.ko
или проверка исходного файла, если он доступен:
Bash:
grep -n "FDP invalid config descriptor at index" drivers/nvme/host/core.c
Если строка
FDP invalid config descriptor at index присутствует, исправление применено.Вывод
CVE-2026-97433 — ошибка в драйвере NVMe Linux Kernel, связанная с невалидацией размера FDP configuration descriptors. Без проверки размер мог быть равен нулю или указывать за пределы лога, что приводило к бесконечной итерации или чтению вне буфера.
Исправление добавляет проверку до смещения указателя. Для защиты нужно обновить ядро до версии с коммитом
97efd7a41aac08b43ea2337c5913a2bc75484f9f или более новым стабильным релизом.В источниках нет подтверждённой эксплуатации, публичного эксплойта и списка затронутых версий. Проверка версии ядра и наличие исправленного кода в
drivers/nvme/host/core.c — основные способы контроля.Официальные источники
- NVD — CVE-2026-97433
- FIRST EPSS — CVE-2026-97433
- nvme: validate FDP configuration descriptor sizes - kernel/git/stable/linux.git - Linux kernel stable tree
- nvme: validate FDP configuration descriptor sizes - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 25.09.2026 — Опубликована первая версия материала.
- 26.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
