CVE: CVE-2026-97528
Продукт: Linux Kernel
Дата публикации: 25.09.2026
Критичность: HIGH
CVSS: 8.8 (3.1)
EPSS: 0,32%; процентиль 22,28%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
Уязвимость CVE-2026-97528 затрагивает драйвер qla2xxx в Linux Kernel. В функции qla_nvme_xmt_ls_rsp() объект uctx освобождается через kfree(), но при этом остаётся привязанным к списку fcport->unsol_ctx_head. Последующие операции добавления или удаления из списка работают с уже освобождённой памятью, что приводит к повреждению структуры данных или аварийному завершению ядра.
Основные характеристики
Ошибка — это use-after-free в драйвере qla2xxx при обработке NVMe unsolicited LS responses. Повреждение списка unsol_ctx_head может повлиять на SCSI-подсистему и вызвать panic.
- Тип ошибки: use-after-free в списке ядра Linux Kernel
- CVSS 3.1:
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H— оценка 8.8, severity HIGH
- Вектор атаки: удалённый доступ без привилегий и взаимодействия пользователя
- Факт эксплуатации: в предоставленных источниках не подтверждено
- EPSS: 0,318% (процентиль 22,28%)
Какие продукты и версии затронуты
Затронут драйвер qla2xxx в Linux Kernel.
- Файл:
drivers/scsi/qla2xxx/qla_nvme.c
- Функция:
qla_nvme_xmt_ls_rsp()
- Структура:
fcport->unsol_ctx_head
- Компонент: NVMe unsolicited LS request/response support в qla2xxx
Точный диапазон версий ядра, где ошибка воспроизводится, в предоставленных источниках не раскрыт. Исправление входит в stable-ветку Linux Kernel и связано с upstream commit e46160a5d4fa59bf4d5f3412b6b5cb79edb967dd.
Причина уязвимости
В
qla_nvme_xmt_ls_rsp() переменная uctx получает указатель на объект, который ранее был добавлен в список fcport->unsol_ctx_head функцией qla2xxx_process_purls_iocb(). Когда NVMe transport вызывает передачу LS response, объект ещё остаётся в списке.На пути ошибки (out
kfree(), но не удаляет его из списка. В результате узел списка продолжает существовать как часть структуры данных, хотя память под ним уже освобождена.Далее при следующем вызове
list_add_tail() для этого fcport запись происходит в освобождённую область памяти, а последующий list_del() может повредить список или вызвать panic.Как работает атака
Ошибка проявляется при обработке unsolicited LS responses в NVMe-режиме qla2xxx. Для её воспроизведения необходимо, чтобы драйвер получил объект uctx, добавленный в список, а затем вошёл в путь ошибки при передаче LS response.
После освобождения памяти через
kfree() узел остаётся в списке. При следующем обращении к списку ядро записывает данные в уже освобождённую область. Это может привести к повреждению соседних структур или вызову panic.В предоставленных источниках не описано конкретное поведение атакующего, который управляет этим сценарием. Механика ошибки подтверждена кодом исправления и описанием уязвимости.
Условия успешной эксплуатации
Для воспроизведения ошибки необходимо:
- Наличие драйвера qla2xxx в ядре Linux Kernel
- Поддержка NVMe unsolicited LS request/response в qla2xxx
- Обработка unsolicited LS response, которая приводит к пути ошибки в
qla_nvme_xmt_ls_rsp()
- Доступ к SCSI-подсистеме или возможность вызвать обработку соответствующего события
Точные условия ввода данных из внешнего устройства не раскрыты в предоставленных источниках. Путь ошибки зависит от внутреннего состояния драйвера и обработки ошибок при передаче LS response.
Возможный сценарий атаки
Сценарий начинается с работы qla2xxx в режиме NVMe unsolicited LS support. Драйвер регистрирует uctx в списке
fcport->unsol_ctx_head.Далее происходит обработка LS reject error, и функция входит в путь out:. В этом месте вызывается
kfree(uctx), но list_del(&uctx->elem) не выполняется. Узел остаётся в списке.При следующем обращении к списку для этого fcport ядро использует освобождённый узел как активный элемент списка. Запись через
list_add_tail() или удаление через list_del() нарушает целостность структуры данных и может привести к аварийному завершению ядра.Есть ли публичный эксплойт
В предоставленных источниках не указано, что публичный эксплойт для CVE-2026-97528 опубликован.
Отсутствует подтверждение:
- Наличие готового PoC
- Подтверждённой эксплуатации в реальных атаках
- Конкретного инструмента или скрипта воспроизведения
- Публичной базы данных эксплойтов с записью по этому CVE
Сами источники содержат только описание ошибки и код исправления. Отсутствие сведений об эксплойте не означает, что он не существует.
Признаки эксплуатации
Специфичных индикаторов компрометации для этой уязвимости в предоставленных источниках нет.
Неспецифичные точки контроля:
- Аномальные ошибки ядра в
dmesgили/var/log/kern.log
- Повторяющиеся panic или kernel oops с упоминанием qla2xxx, NVMe, unsol_ctx или SCSI
- Неожиданные сбои при работе с NVMe/SCSI устройствами
- Рост количества ошибок в драйвере qla2xxx после обновления ядра или изменения конфигурации хранилища
Эти признаки не являются подтверждёнными IOC для CVE-2026-97528 и требуют сопоставления с контекстом системы.
Как обнаружить атаку
Для обнаружения последствий ошибки можно использовать:
dmesg -T | grep -iE 'qla2xxx|nvme|unsol_ctx|panic|oops'
- Анализ
/var/log/kern.logна аномальные сообщения ядра
- Проверку журналов SCSI и NVMe после сбоев хранилища
- Мониторинг kernel oops, которые содержат ссылки на qla2xxx или unsol_ctx
Такие методы не подтверждают наличие CVE-2026-97528 напрямую. Они помогают выявить последствия ошибки памяти в драйвере.
Для проверки версии ядра:
Bash:
uname -r
uname -a
cat /proc/version
Как проверить свою версию
Проверка версии ядра Linux Kernel выполняется стандартными командами:
uname -r— возвращает номер ядра
uname -a— возвращает полную информацию о системе и ядре
cat /proc/version— показывает версию ядра из/proc
Пример вывода:
Bash:
$ uname -r
6.12.0-rc5
Точная версия, в которой ошибка уже исправлена, в предоставленных источниках не указана. Исправление связано с stable commit c55d649a6cc246c3ccd5d118faea230c46b60f35 и upstream commit e46160a5d4fa59bf4d5f3412b6b5cb79edb967dd.
Для точной проверки нужно сопоставить версию ядра с веткой stable, куда было внесено исправление.
Исправление
Исправление входит в Linux Kernel stable tree и добавляет вызов
list_del(&uctx->elem) перед kfree(uctx) в функции qla_nvme_xmt_ls_rsp().- Commit: e46160a5d4fa59bf4d5f3412b6b5cb79edb967dd
- Stable commit: c55d649a6cc246c3ccd5d118faea230c46b60f35
- Файл:
drivers/scsi/qla2xxx/qla_nvme.c
- Изменение: 1 строка вставки перед освобождением памяти
Рекомендуется:
- Обновить ядро до версии stable, содержащей исправление
- Проверить наличие qla2xxx через
lsmod | grep qlaилиlspci -k | grep -i qla
- Перезагрузить систему после обновления ядра
- Повторить проверку версий и журналов после применения патча
Временные меры защиты
В предоставленных источниках не описаны временные меры, которые гарантированно устраняют ошибку.
Неспецифичные действия для снижения риска:
- Ограничить использование NVMe unsolicited LS support в qla2xxx, если это возможно через параметры ядра или драйвера
- Избегать сценариев, которые вызывают частые ошибки LS reject в qla2xxx
- Мониторить dmesg и логи ядра после изменений конфигурации хранилища
- Откладывать обновление до применения патча stable, если система критична
Эти меры не являются подтверждённым обходом уязвимости и могут зависеть от конкретной конфигурации системы.
Как проверить устранение уязвимости
После обновления ядра нужно проверить:
- Версию ядра:
uname -r
- Наличие qla2xxx:
lsmod | grep qla
- Отсутствие новых ошибок в dmesg после работы с NVMe/SCSI устройствами
- Сравнение версии ядра с веткой stable, содержащей commit c55d649a6cc246c3ccd5d118faea230c46b60f35
Пример проверки:
Bash:
uname -r
dmesg -T | grep -iE 'qla2xxx|nvme|panic|oops'
Если версия ядра ниже stable-ветки с исправлением, нужно обновить пакет ядра или применить патч от дистрибутива.
Вывод
CVE-2026-97528 — это ошибка use-after-free в драйвере qla2xxx Linux Kernel. Она возникает из-за освобождения узла списка без его удаления из
fcport->unsol_ctx_head. Последствия могут включать повреждение структуры данных и panic ядра.Исправление добавляет вызов
list_del() перед kfree(). Для защиты нужно обновить ядро до stable-версии, содержащей патч, и проверить отсутствие ошибок qla2xxx после обновления.Официальные источники
- NVD — CVE-2026-97528
- FIRST EPSS — CVE-2026-97528
- scsi: qla2xxx: Unlink NVMe unsol ctx before freeing on LS reject error - kernel/git/stable/linux.git - Linux kernel stable tree
- scsi: qla2xxx: Unlink NVMe unsol ctx before freeing on LS reject error - kernel/git/stable/linux.git - Linux kernel stable tree
- scsi: qla2xxx: Unlink NVMe unsol ctx before freeing on LS reject error - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 30.09.2026 — Опубликована первая версия материала.
