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 commitd12168084c8c1b6d883c8eca5853929ac5136a9e
- Дистрибутивы, использующие такие версии ядра без соответствующего патча
Исправление входит в следующие файлы:
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 и мониторить ошибки ядра.Отсутствие публичного эксплойта не означает отсутствие риска. Механика ошибки типична для критических уязвимостей в ядре, поэтому приоритетом должно быть обновление.
Официальные источники
- NVD — CVE-2026-98115
- ksmbd: safely drain sessions during logoff - kernel/git/stable/linux.git - Linux kernel stable tree
- ksmbd: safely drain sessions during logoff - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 29.09.2026 — Опубликована первая версия материала.
