CVE-2026-97557 в Linux Kernel: утечка ссылок CIFS, падение ядра при размонтировании и патч

CVE: CVE-2026-97557
Продукт: Linux Kernel
Дата публикации: 25.09.2026
Критичность: HIGH
CVSS: 7.5 (3.1)
EPSS: 0,60%; процентиль 46,74%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


Уязвимость CVE-2026-97557 затрагивает клиент SMB/CIFS в ядре Linux. Функция cifs_queue_oplock_break() увеличивала счётчик ссылок на файл до постановки задачи в очередь, но не проверяла результат queue_work(). При повторном приходе oplock break во время ожидания первой задачи вторая задача не ставилась, а ссылка не снималась.

Накопление неснятых ссылок приводило к ошибке размонтирования CIFS и kernel BUG на fs/super.c:777. Патч переносит cifsFileInfo_get() внутрь условия успешной постановки работы.

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


Риск связан с некорректным управлением счётчиком ссылок в клиенте SMB/CIFS ядра Linux. Проблема проявляется при работе с медленным SMB-сервером и приводит к падению ядра во время размонтирования файловой системы.

  • Тип ошибки: утечка счётчика ссылок (reference count leak) в CIFS client oplock break path.
  • CVSS 3.1: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, оценка HIGH, 7.5.
  • Вектор атаки: удалённое воздействие через медленный SMB-сервер; требуется подключение к CIFS-тому и повторные oplock break запросы.
  • Факт эксплуатации: в предоставленных источниках нет подтверждения активной эксплуатации или публичного эксплойта.
  • EPSS: 0,603% (сырое значение 0.00603), процентиль 46,71%.

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


Затронут клиент SMB/CIFS в ядре Linux.

Патч входит в stable-деревья ядра и связан с файлом fs/smb/client/misc.c. Изменённая функция — cifs_queue_oplock_break().

Версии, которые могут быть затронуты:

  • Ядра Linux, содержащие исходный код CIFS client без патча smb: client: avoid leaking refcount in cifs_queue_oplock().
  • Системы с подключёнными CIFS/SMB-томами, где клиент может получать oplock break от сервера.
  • Размонтирование CIFS после срабатывания утечки ссылок приводит к ошибке ядра.

В предоставленных источниках нет точного списка версий ядра или дистрибутивов. Патч доступен в stable-коммитах:


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


Корневая причина — некорректная последовательность управления ссылкой на файл в функции cifs_queue_oplock_break().

Функция до патча выполняла:

C:
cifsFileInfo_get(cfile);
queue_work(cifsoplockd_wq, &cfile->oplock_break);

Ссылка увеличивалась безусловно. Уменьшать счётчик должна была только работающая задача cifs_oplock_break. Если во время ожидания первой задачи приходил второй oplock break, функция снова вызывала queue_work().

При этом queue_work() могла вернуть false и не поставить вторую задачу в очередь. В этом случае увеличенная ссылка на файл никогда не снималась.

Патч меняет порядок:

C:
if (queue_work(cifsoplockd_wq, &cfile->oplock_break))
cifsFileInfo_get(cfile);

Ссылка увеличивается только если задача реально поставлена в очередь. Это устраняет утечку.

Патч ссылается на исходный коммит b98749cac4a69 с названием "CIFS: keep FileInfo handle live during oplock break".

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


Атака использует клиент CIFS в ядре Linux и медленный SMB-сервер.

Путь данных до уязвимого компонента:

  • Клиент подключён к CIFS/SMB-тому.
  • Сервер отправляет oplock break для файла.
  • Ядро вызывает cifs_queue_oplock_break().
  • Функция увеличивает счётчик ссылок на файл через cifsFileInfo_get(cfile).
  • Функция ставит задачу в очередь через queue_work().
  • Если сервер медленный, вторая oplock break может прийти до выполнения первой задачи.
  • Второй вызов queue_work() возвращает false и не ставит задачу.
  • Ссылка из шага 4 остаётся увеличенной.
  • Повторные события накапливают неснятые ссылки.
  • При размонтировании CIFS ядро видит, что dentry или inode ещё используются.

Результат:

Код:
BUG: Dentry ... still in use (1) [unmount of cifs cifs]
VFS: Busy inodes after unmount of cifs (cifs)
kernal BUG at fs/super.c:777!

Падение ядра происходит на этапе размонтирования файловой системы.

Вектор CVSS указывает на удалённое воздействие без необходимости привилегий и пользовательского взаимодействия: AV:N/AC:L/PR:N/UI:N/S:U.

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


Для воспроизведения проблемы нужны:

  • Подключённый CIFS/SMB-том на системе с уязвимым ядром.
  • SMB-сервер, способный отправлять oplock break.
  • Медленный ответ сервера или задержка между первой и второй oplock break.
  • Возможность повторного вызова cifs_queue_oplock_break() для одного файла.
  • Последующее размонтирование CIFS-тома.

Не требуется:

  • Локальный доступ к системе.
  • Привилегированные права в ядре.
  • Пользовательское взаимодействие.
  • Эксплуатация других подсистем ядра.

В источниках нет указания на конкретные версии SMB, параметры сервера или точное время задержки. Детали не раскрыты.

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


Сценарий начинается с подключения Linux-клиента к CIFS/SMB-тому.

Сервер отправляет первый oplock break. Ядро ставит задачу в очередь и увеличивает ссылку на файл. Пока задача ещё не выполнена, сервер отправляет второй oplock break для того же файла.

Второй вызов queue_work() не ставит задачу, потому что первая уже находится в очереди или обработка идёт. Ссылка увеличивается повторно, но снять её никто не сможет.

После нескольких таких событий счётчик ссылок на файл становится положительным. При размонтировании CIFS ядро проверяет состояние dentry и inode.

Проверка обнаруживает, что объект ещё используется. Ядро выводит сообщение об ошибке и вызывает kernel BUG в fs/super.c:777.

Система падает или переходит в аварийное состояние на уровне ядра.

Патч устраняет проблему, перемещая увеличение ссылки внутрь условия успешной постановки задачи.

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


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

Источники содержат:

  • Описание уязвимости.
  • CVSS 3.1 с оценкой HIGH.
  • EPSS 0.00603.
  • Stable-коммиты патча.
  • Изменённый код в fs/smb/client/misc.c.

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

  • Публичные PoC для CIFS oplock break.
  • Тестовые сценарии с медленным SMB-сервером.
  • Отчёты об падении ядра при размонтировании CIFS.
  • Обсуждения в mailing list linux-cve или ядре.

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


Специфичные IOC для CVE-2026-97557 не подтверждены источниками. Ниже приведены общие точки контроля, которые можно использовать как неспецифичные.

  • Падение ядра с сообщением BUG: Dentry ... still in use при размонтировании CIFS.
  • Строка VFS: Busy inodes after unmount of cifs (cifs) в kernel log.
  • Ошибка kernel BUG at fs/super.c:777!.
  • Повторные ошибки размонтирования SMB/CIFS после работы с медленным сервером.
  • Рост числа открытых файловых дескрипторов или dentry на CIFS-томе.
  • Аномальные задержки в SMB-клиенте перед размонтированием.

Эти признаки не являются уникальными для CVE-2026-97557 и могут появляться при других ошибках ядра или файловой системы.

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


Для обнаружения проблемы можно использовать:

  • Проверку версии ядра на наличие патча.
  • Анализ kernel log на ошибки CIFS unmount.
  • Мониторинг ошибок fs/super.c:777.
  • Проверку состояния подключённых CIFS-томов перед размонтированием.
  • Тестирование сценария медленного SMB-сервера в изолированной среде.

Команды для проверки версии ядра:

Bash:
uname -r

Bash:
uname -a

Bash:
cat /proc/version

Для просмотра логов ядра:

Bash:
dmesg -T | grep -E 'cifs|CIFS|unmount|BUG|fs/super.c'

Bash:
grep -E 'cifs|CIFS|unmount|BUG|fs/super.c' /var/log/kern.log

Для проверки подключённых CIFS-томов:

Bash:
mount | grep cifs

Bash:
cat /proc/mounts | grep cifs

Эти команды не являются специфичными IOC и подходят для общей диагностики.

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


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

Bash:
uname -r

Bash:
uname -a

Bash:
cat /proc/version

Проверка, установлен ли патч в исходном коде ядра:

Bash:
grep -R "cifs_queue_oplock_break" /lib/modules/$(uname -r)/source/fs/smb/client/misc.c 2>/dev/null || true

Если доступен исходный код ядра:

Bash:
git log --oneline | grep -i "avoid leaking refcount in cifs_queue_oplock"

Проверка через git в stable-дереве:

Bash:
git log --all --grep="smb: client: avoid leaking refcount in cifs_queue_oplock_break()" --oneline

Если патч присутствует, версия ядра должна содержать один из stable-коммитов.

Для пакетного менеджера:

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

Точное соответствие версии дистрибутива патчу нужно проверять в документации конкретного дистрибутива.

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


Основное исправление — установка патча в ядро Linux.

Патч:


Изменение в fs/smb/client/misc.c:

C:
cifsFileInfo_get(cfile);
queue_work(cifsoplockd_wq, &cfile->oplock_break);

заменяется на:

C:
if (queue_work(cifsoplockd_wq, &cfile->oplock_break))
cifsFileInfo_get(cfile);

Для дистрибутивов:

  • Обновить пакет ядра до версии с патчем.
  • Проверить наличие обновления в репозитории дистрибутива.
  • Перезагрузить систему после установки нового ядра.

Если дистрибутив не выпустил отдельный пакет, можно применить патч вручную к исходному коду ядра и пересобрать модуль или ядро.

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


Временные меры до установки патча:

  • Ограничить подключение к медленным SMB-серверам.
  • Отключить CIFS-томы, если они не критичны.
  • Избегать одновременного размонтирования CIFS после работы с сервером, который может отправлять oplock break.
  • Использовать более быстрые SMB-серверы или прокси, если это возможно.
  • Мониторить kernel log на ошибки CIFS unmount.
  • Ограничить число параллельных подключений к одному CIFS-тому.

Эти меры не устраняют уязвимость и могут снизить вероятность срабатывания при размонтировании.

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


После установки патча нужно проверить:

  • Версию ядра.
  • Наличие патча в исходном коде.
  • Отсутствие ошибок CIFS unmount после тестового размонтирования.
  • Корректную работу SMB-клиента.

Команды:

Bash:
uname -r

Bash:
grep -R "cifs_queue_oplock_break" /lib/modules/$(uname -r)/source/fs/smb/client/misc.c 2>/dev/null || true

Bash:
git log --oneline | grep -i "avoid leaking refcount in cifs_queue_oplock"

Тестовое размонтирование:

Bash:
mount | grep cifs
umount /mnt/cifs 2>&1 || true
dmesg -T | tail -n 50

Если после размонтирования нет ошибок BUG: Dentry ... still in use, VFS: Busy inodes after unmount of cifs и kernel BUG at fs/super.c:777!, патч работает.

Полное подтверждение требует тестирования сценария медленного SMB-сервера в изолированной среде.

Вывод​


CVE-2026-97557 — уязвимость управления счётчиком ссылок в CIFS client ядра Linux. Проблема возникает при повторных oplock break от медленного SMB-сервера и приводит к утечке ссылок на файл.

Ключевой эффект — падение ядра при размонтировании CIFS с ошибкой fs/super.c:777. CVSS 3.1 оценивает риск как HIGH, но практическая опасность зависит от наличия подключённых CIFS-томов и поведения SMB-сервера.

Исправление простое и локальное: патч переносит увеличение ссылки внутрь условия успешной постановки задачи в очередь. Для систем с CIFS/SMB-подключениями рекомендуется установить патч или обновить ядро до версии, содержащей fix.

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


  1. NVD — CVE-2026-97557
  2. FIRST EPSS — CVE-2026-97557
  3. smb: client: avoid leaking refcount in cifs_queue_oplock_break() - kernel/git/stable/linux.git - Linux kernel stable tree
  4. smb: client: avoid leaking refcount in cifs_queue_oplock_break() - kernel/git/stable/linux.git - Linux kernel stable tree
  5. smb: client: avoid leaking refcount in cifs_queue_oplock_break() - kernel/git/stable/linux.git - Linux kernel stable tree
  6. smb: client: avoid leaking refcount in cifs_queue_oplock_break() - kernel/git/stable/linux.git - Linux kernel stable tree
  7. CVEs — The Linux Kernel documentation

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


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