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-коммитах:
- 2ed2c29dd9593637cfa25ac1eb23241b20202778
- 9f2e63f1b2d5fc5b5423424902c091123e220e7e
- af0193bbf1ac8c0f67f972998b0cc629d6116cf6
- dfe7b750c7e069873a8a57a11c816831a235618a
Причина уязвимости
Корневая причина — некорректная последовательность управления ссылкой на файл в функции
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.
Патч:
- smb: client: avoid leaking refcount in cifs_queue_oplock_break()
- smb: client: avoid leaking refcount in cifs_queue_oplock_break()
- smb: client: avoid leaking refcount in cifs_queue_oplock_break()
- smb: client: avoid leaking refcount in cifs_queue_oplock_break()
Изменение в
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.
Официальные источники
- NVD — CVE-2026-97557
- FIRST EPSS — CVE-2026-97557
- smb: client: avoid leaking refcount in cifs_queue_oplock_break() - kernel/git/stable/linux.git - Linux kernel stable tree
- smb: client: avoid leaking refcount in cifs_queue_oplock_break() - kernel/git/stable/linux.git - Linux kernel stable tree
- smb: client: avoid leaking refcount in cifs_queue_oplock_break() - kernel/git/stable/linux.git - Linux kernel stable tree
- smb: client: avoid leaking refcount in cifs_queue_oplock_break() - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 28.09.2026 — Опубликована первая версия материала.
