CVE-2026-98115 в Linux Kernel: race condition в ksmbd при logoff, уязвимые версии и защита

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

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


Уязвимость CVE-2026-98115 затрагивает модуль ksmbd ядра Linux. Ошибка возникает из-за гоночного состояния между завершением SMB3-сессии (LOGOFF) и освобождением общих объектов сессии, когда запросы одной сессии могут выполняться по нескольким каналам.

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

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


Риск связан с внутренним состоянием SMB-сервера в ядре Linux: при завершении сессии сервер может освободить объекты до завершения всех связанных операций.

  • Тип ошибки: race condition / use-after-free в модуле ksmbd
  • CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (8.8, HIGH)
  • Вектор атаки: удалённый доступ через SMB3 без необходимости авторизации или взаимодействия пользователя
  • Факт эксплуатации: не подтверждён в предоставленных источниках
  • EPSS: нет данных; процентиль нет данных

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


Затронут модуль ksmbd ядра Linux, реализующий серверную часть SMB.

Версии ядра с уязвимостью:

  • Ядра Linux, содержащие исходный код до исправления commit a7e6df0bb92642bee4431b2b85c69ada1e463b21 (stable) или upstream commit d12168084c8c1b6d883c8eca5853929ac5136a9e
  • Дистрибутивы, использующие такие версии ядра без соответствующего патча

Исправление входит в следующие файлы:

  • fs/smb/server/connection.c
  • fs/smb/server/mgmt/user_session.c
  • fs/smb/server/mgmt/user_session.h
  • fs/smb/server/smb2pdu.c
  • fs/smb/server/vfs_cache.c
  • fs/smb/server/vfs_cache.h

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


SMB3 multichannel позволяет выполнять запросы одной сессии по нескольким соединениям. При завершении сессии (LOGOFF) сервер должен дождаться освобождения всех каналов, привязанных к сессии, прежде чем освободить общие объекты.

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

  • записью состояния tearing_down и проверкой этого состояния при регистрации канала или отмене операций;
  • освобождением объектов сессии и завершением асинхронных задач, привязанных к файлам сессии;
  • обработкой блокировок byte-range, которые остаются в состоянии «выполняется» до закрытия файла.

Из-за этого при одновременном LOGOFF, CANCEL или разрыве соединения сервер мог освободить объекты, на которые ещё ссылались активные операции. Это приводило к обращению к освобождённой памяти или повреждению структуры данных ядра.

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


Атака использует гонку между обработчиком LOGOFF и другими операциями SMB.

  • Клиент устанавливает SMB3-сессию с несколькими каналами (multichannel).
  • На сессии выполняются асинхронные операции, включая блокировки byte-range или запросы CANCEL.
  • Клиент отправляет LOGOFF или вызывает разрыв соединения.
  • Сервер начинает завершение сессии и освобождает общие объекты до того, как все каналы освободят свои ссылки.
  • Активные операции продолжают обращаться к освобождённым объектам или вызову callback-функций на уже удалённых структурах.

Исправление вносит атомарные переходы состояния работы (cmpxchg для KSMBD_WORK_ACTIVE → KSMBD_WORK_CANCELLED), флаг tearing_down с защитой через lock и функцию ksmbd_wake_session_blocked_works(), которая будит заблокированные операции во время drain.

Ключевые изменения в коде:

  • В connection.c: добавлен вызов ksmbd_wake_session_blocked_works(sess) перед освобождением сессии; заменена простая запись состояния на атомарный cmpxchg.
  • В user_session.c: добавлен флаг tearing_down, который блокирует повторное завершение сессии и синхронизирует cleanup.
  • В smb2pdu.c: при LOGOFF проверяется флаг tearing_down; если он уже установлен, возвращается ошибка; иначе устанавливается флаг и выполняется ожидание idle состояния сессии.
  • В vfs_cache.c: добавлена функция ksmbd_wake_session_blocked_works(), которая обходит файлы сессии и будит заблокированные работы.

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


Для проявления ошибки необходимы следующие условия:

  • Серверная часть SMB (ksmbd) активна в ядре Linux.
  • Клиент использует SMB3 multichannel или отправляет несколько запросов по одной сессии.
  • На сессии присутствуют асинхронные операции, блокировки byte-range или запросы CANCEL.
  • Происходит одновременное завершение сессии (LOGOFF) и обработка других операций.

Дополнительные требования:

  • Доступ к SMB-серверу из сети (вектор AV:N).
  • Отсутствие необходимости в локальной авторизации (PR:L).
  • Отсутствие взаимодействия пользователя (UI:N).

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


Сценарий предполагает удалённый клиент, который взаимодействует с Linux-сервером через SMB.

  • Клиент устанавливает соединение и создаёт сессию с несколькими каналами.
  • Клиент отправляет несколько асинхронных запросов на файлы в рамках этой сессии.
  • Один из запросов ставит byte-range lock, который остаётся в состоянии ожидания.
  • Клиент отправляет LOGOFF или вызывает CANCEL для части операций.
  • Сервер обрабатывает LOGOFF, устанавливает состояние tearing_down и начинает освобождение сессии.
  • Одновременно другой поток пытается зарегистрировать канал или обработать отмену операции.
  • Из-за гоночного состояния сервер может освободить объекты до завершения всех операций, что приводит к обращению к освобождённой памяти.

После освобождения объектов активные callback-функции могут обращаться к уже удалённым структурам ksmbd_file или ksmbd_work. Это может привести к повреждению памяти ядра и потенциальному компрометации системы.

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


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

Отсутствие сведений в каталогах не означает отсутствие эксплойта. Механика ошибки (use-after-free в ядре) типична для уязвимостей с высоким уровнем риска, но конкретные детали реализации атаки не раскрыты в официальных источниках.

Для оценки актуальности следует отслеживать:

  • Обновления дистрибутивов Linux с патчем commit a7e6df0bb92642bee4431b2b85c69ada1e463b21.
  • Обсуждения в mailing list linux-cve и ядреных списках.
  • Публичные PoC на платформах, специализирующихся на эксплойтах.

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


Специфичных IOC для CVE-2026-98115 в предоставленных источниках нет. Ниже приведены неспецифичные признаки, которые могут указывать на аномальную активность SMB-сервера:

  • Внезапное увеличение числа ошибок STATUS_UNEXPECTED_IO_ERROR или STATUS_USER_SESSION_DELETED в журналах ядра.
  • Появление сообщений о race condition или use-after-free в dmesg, связанных с модулем ksmbd.
  • Аномальные значения CPU и памяти на сервере во время массового завершения SMB-сессий.
  • Остановка или зависание процессов, использующих SMB-серверную часть ядра.

Эти признаки не являются подтверждением эксплуатации CVE-2026-98115. Они могут возникать при других сбоях или нагрузке.

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


Для обнаружения аномалий в работе ksmbd рекомендуется:

  • Мониторинг dmesg и системного журнала на ошибки модуля ksmbd.
  • Анализ логов SMB-сервера на повторяющиеся ошибки STATUS_UNEXPECTED_IO_ERROR.
  • Проверка нагрузки CPU и памяти во время массовых операций LOGOFF.
  • Использование инструментов для мониторинга ядра (e.g., eBPF, perf) для отслеживания вызовов функций в модуле ksmbd.

Конкретные сигнатуры для детектирования CVE-2026-98115 не предоставлены. Детекция должна базироваться на аномалиях поведения SMB-сервера и ошибках ядра.

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


Проверка версии ядра Linux:

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

Для проверки наличия исправления в дистрибутиве:

Bash:
dpkg -l | grep linux-kernel
rpm -qa | grep kernel
apt list --installed 2>/dev/null | grep linux-image

Замените имя пакета на актуальное для вашего дистрибутива. Например, в Debian/Ubuntu это linux-image-<version>, в RHEL/CentOS — kernel.

Проверка конкретного commit:

Bash:
git log --oneline | grep a7e6df0bb92642bee4431b2b85c69ada1e463b21
git log --oneline | grep d12168084c8c1b6d883c8eca5853929ac5136a9e

Команды применимы для исходного дерева ядра. Для бинарных пакетов дистрибутива используйте инструменты управления пакетами.

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


Исправление CVE-2026-98115 входит в commit a7e6df0bb92642bee4431b2b85c69ada1e463b21 (stable) и upstream commit d12168084c8c1b6d883c8eca5853929ac5136a9e.

Рекомендации:

  • Обновить ядро Linux до версии, содержащей исправление.
  • Проверить наличие патча в дистрибутиве через менеджер пакетов.
  • Если обновление не возможно, рассмотреть временные меры (см. раздел «Временные меры»).

Ссылки на исходники:


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


При невозможности немедленного обновления ядра:

  • Ограничить использование SMB3 multichannel на сервере.
  • Уменьшить количество одновременных SMB-сессий и асинхронных операций.
  • Отключить ksmbd, если SMB-сервер не является критичным для инфраструктуры.
  • Мониторинг dmesg и журналов ядра для раннего обнаружения сбоев.

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

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


После обновления ядра:

  • Проверьте версию ядра:

Bash:
uname -r

  • Убедитесь, что версия содержит исправление (commit a7e6df0bb92642bee4431b2b85c69ada1e463b21 или более новый).
  • Проверьте наличие патча в дистрибутиве:

Bash:
dpkg -l | grep linux-kernel
rpm -qa | grep kernel

  • Проведите функциональные тесты SMB-сервера: установите сессию, отправьте несколько запросов и выполните LOGOFF.
  • Проверьте dmesg на отсутствие ошибок модуля ksmbd после тестов.

Вывод​


CVE-2026-98115 — это race condition в модуле ksmbd ядра Linux, который может привести к обращению к освобождённой памяти при завершении SMB3-сессии. Уязвимость имеет высокий уровень риска (CVSS 8.8) и может быть эксплуатируема удалённо без авторизации.

Для администратора главное — проверить версию ядра и обновить его до версии с патчем commit a7e6df0bb92642bee4431b2b85c69ada1e463b21. Если обновление невозможно, ограничить использование SMB3 multichannel и мониторить ошибки ядра.

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

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


  1. NVD — CVE-2026-98115
  2. ksmbd: safely drain sessions during logoff - kernel/git/stable/linux.git - Linux kernel stable tree
  3. ksmbd: safely drain sessions during logoff - kernel/git/stable/linux.git - Linux kernel stable tree
  4. CVEs — The Linux Kernel documentation

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


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