CVE: CVE-2026-97562
Продукт: Linux Kernel
Дата публикации: 25.09.2026
Критичность: HIGH
CVSS: 7.5 (3.1)
EPSS: 0,41%; процентиль 32,48%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В клиенте SMB ядра Linux обнаружена race condition при работе с DFS-ссылками. Функция tcon_super_cb() сохраняет указатель на superblock без активного референса, а __cifs_get_super() устанавливает его только после освобождения s_umount в iterate_supers_type(). Параллельное истечение DFS automount может освободить superblock до использования в cifs_sb_active(), что приводит к use-after-free и сбою ядра.
Основные характеристики
Ошибка возникает в SMB-клиенте Linux Kernel при совпадении failover и освобождении DFS-суперблока. Уязвимость подтверждена детерминированным KASAN-тестом, а публичная эксплуатация на реальных системах не задокументирована.
- Тип ошибки: use-after-free (slab-use-after-free)
- CVSS:
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H— 7.5 HIGH
- Вектор атаки: удалённый, без необходимости привилегий и взаимодействия с пользователем
- Эксплуатация: подтверждена KASAN-тестом; публичный PoC для реальных систем не задокументирован
- EPSS: 0,41% (процентиль 32,48%)
Какие продукты и версии затронуты
Затронут Linux Kernel с включённым клиентом SMB и поддержкой DFS.
- Файл:
fs/smb/client/misc.c
- Функции:
tcon_super_cb(),__cifs_get_super(),iterate_supers_type(),cifs_sb_active()
- Сценарий: автоматическое монтирование DFS и failover SMB-соединений
- Версии ядра: конкретные диапазоны версий в источниках не указаны; исправление распространено на stable-ветки через commits d806d5a85dcbe2a0f181b2f0f9f61ddfbefa1818 и его порты
- Платформы: все системы Linux, использующие SMB-клиент с DFS-поддержкой
Причина уязвимости
Ошибка связана с несогласованным управлением референсами superblock в клиенте SMB.
Функция
tcon_super_cb() вызывается как колбэк и сохраняет указатель на superblock в структуре sd. Активный референс через cifs_sb_active() устанавливается не в момент сохранения указателя, а позже — уже после выхода из iterate_supers_type(), когда общий референс s_umount освобождён.В окне между сохранением указателя и установкой активного референса другой поток может выполнить DFS automount expiry. Этот процесс освобождает superblock. Когда
__cifs_get_super() затем вызывает cifs_sb_active() на уже освобождённом объекте, возникает use-after-free.Исправление переносит вызов
cifs_sb_active() внутрь колбэка tcon_super_cb(), пока iterate_supers_type() ещё удерживает общий референс s_umount. Соответствующий release остаётся в cifs_put_tcp_super().Как работает атака
Уязвимость реализуется через race condition между двумя потоками ядра.
Первый поток выполняет failover SMB-соединения и вызывает
__cifs_get_super(). Внутри этой функции вызывается iterate_supers_type() с колбэком tcon_super_cb(). Колбэк находит подходящий superblock по критериям DFS (совпадение dfs_root_ses, server и origin_fullpath) и сохраняет указатель в sd.sb.Второй поток параллельно обрабатывает истечение DFS automount. Он освобождает superblock, потому что активный референс ещё не был установлен.
После завершения
iterate_supers_type() функция __cifs_get_super() получает указатель из sd.sb и вызывает cifs_sb_active(). Если к этому моменту superblock уже освобождён, вызов работает с валидным по памяти, но логически недействительным объектом.KASAN фиксирует ошибку как
slab-use-after-free in cifs_sb_active+0x77/0x80.Условия успешной эксплуатации
Для воспроизведения ошибки необходимы следующие условия:
- Включённый SMB-клиент в ядре Linux
- Поддержка DFS и автоматическое монтирование DFS-ссылок
- Наличие failover-сценария, вызывающего
__cifs_get_super()
- Параллельное истечение DFS automount во время выполнения failover
- Доступ к системе или возможность инициировать SMB-failover и DFS-expiry одновременно
Возможный сценарий атаки
Система подключена к SMB-серверу через DFS-ссылку. Во время переключения на резервный сервер ядро запускает процесс failover.
В этот момент другой поток обрабатывает истечение автоматического монтирования DFS. Указатель superblock сохраняется в структуре данных, но активный референс устанавливается с задержкой.
Если освобождение superblock происходит раньше установки референса, функция
cifs_sb_active() обращается к уже выделенной памяти. Это приводит к повреждению ядра и возможному падению системы.Сценарий воспроизводится детерминированно в тестовой среде с KASAN включённым.
Есть ли публичный эксплойт
Доступны исходные коды исправления и описание ошибки.
- Commit: d806d5a85dcbe2a0f181b2f0f9f61ddfbefa1818 — исходный фикс
- Порт на stable: 5b01a8c0209690db75341528ec53fd87e0ac1460 — порт
- Порт на stable: a6b6561522212af852c9ad8a7dca8d59ef2c7377 — порт
- Порт на stable: ea43a15cea36dc5ddd832be5bddeac7dd804cbcf — порт
Публичный PoC в виде готового эксплойта для реальных систем не подтверждён. Есть детерминированный KASAN-тест, воспроизводящий race condition.
Подтверждённая эксплуатация на продакшн-системах не задокументирована.
Признаки эксплуатации
Специфичные IOC для этой уязвимости не предоставлены в источниках. Ниже приведены общие точки контроля, которые можно использовать при подозрении на эксплуатацию.
- Внезапное падение ядра с сообщениями KASAN или oops в
dmesg/journalctl
- Повторяющиеся ошибки SMB failover и DFS automount expiry одновременно
- Аномальная активность в логировании SMB-клиента (
fs/smb/client/misc.c)
- Повышенная загрузка ядра во время операций с DFS-ссылками
Эти признаки неспецифичны и могут возникать при других сбоях. Для подтверждения эксплуатации требуется корреляция с конкретным сценарием failover + expiry.
Как обнаружить атаку
Для обнаружения уязвимости и её возможной эксплуатации используйте следующие методы.
- Проверка версии ядра:
uname -r,uname -a,cat /proc/version
- Мониторинг системного журнала на ошибки KASAN, oops, panic с упоминанием
cifs_sb_activeилиslab-use-after-free
- Анализ логов SMB-клиента на частые failover и DFS automount expiry
- Проверка наличия исправленных commits в ядре: d806d5a85dcbe2a0f181b2f0f9f61ddfbefa1818 или его порты
- Включение KASAN в тестовых средах для воспроизведения race condition
Команды проверки:
Bash:
uname -r
uname -a
cat /proc/version
git log --oneline | grep d806d5a85dcbe2a0f181b2f0f9f61ddfbefa1818
git log --oneline | grep 5b01a8c0209690db75341528ec53fd87e0ac1460
Как проверить свою версию
Проверьте текущую версию ядра и наличие исправления.
uname -r— краткая версия ядра
uname -a— полная информация о ядре
cat /proc/version— версия из/proc
git log --oneline | grep d806d5a85dcbe2a0f181b2f0f9f61ddfbefa1818— наличие исходного фикса в tree
git log --oneline | grep 5b01a8c0209690db75341528ec53fd87e0ac1460— наличие порта на stable
Если вы используете дистрибутив, проверьте пакет ядра через менеджер пакетов:
Bash:
dpkg -l | grep linux-image # Debian/Ubuntu
rpm -qa | grep kernel # RHEL/CentOS/Fedora
Исправление
Исправление распространено через commits в Linux Kernel stable tree.
- Исходный фикс: d806d5a85dcbe2a0f181b2f0f9f61ddfbefa1818 — commit
- Порт на stable: 5b01a8c0209690db75341528ec53fd87e0ac1460 — commit
- Порт на stable: a6b6561522212af852c9ad8a7dca8d59ef2c7377 — commit
- Порт на stable: ea43a15cea36dc5ddd832be5bddeac7dd804cbcf — commit
Рекомендации:
- Обновите ядро до версии, содержащей один из портов
- Если обновление не возможно немедленно, рассмотрите временные меры из раздела «Временные меры защиты»
- Проверьте наличие исправления после обновления:
git log --oneline | grep d806d5a85dcbe2a0f181b2f0f9f61ddfbefa1818
Ссылки на исходники:
Временные меры защиты
При невозможности немедленного обновления ядра можно снизить вероятность срабатывания race condition.
- Отключите DFS automount, если это допустимо в вашей конфигурации
- Ограничьте частоту SMB failover через настройку таймаутов и повторных попыток
- Изолируйте системы с критичными SMB/DFS-соединениями от нагрузок, вызывающих одновременный failover и expiry
- Включите KASAN в тестовых средах для раннего обнаружения проблем
- Мониторинг системного журнала на ошибки KASAN и oops
Эти меры не устраняют уязвимость, но снижают вероятность её срабатывания.
Не используйте временные меры как замену обновлению ядра.
Как проверить устранение уязвимости
После обновления проверьте наличие исправления.
uname -r— убедитесь, что версия ядра соответствует релизу с исправлением
git log --oneline | grep d806d5a85dcbe2a0f181b2f0f9f61ddfbefa1818— наличие исходного фикса
git log --oneline | grep 5b01a8c0209690db75341528ec53fd87e0ac1460— наличие порта на stable
- Проверьте логи после обновления: нет новых ошибок KASAN или oops с упоминанием
cifs_sb_active
- Проведите повторный KASAN-тест в тестовой среде, если доступен
Если исправление не найдено, обновите ядро до более поздней версии или обратитесь к дистрибутору за патчем.
Вывод
CVE-2026-97562 — это use-after-free в клиенте SMB Linux Kernel, связанный с race condition при DFS automount expiry и failover. Ошибка подтверждена KASAN-тестом и исправлена переносом установки активного референса внутрь колбэка.
Риск связан с падением ядра и потенциальным повреждением памяти. Эксплуатация возможна при наличии SMB/DFS-соединений и параллельного failover + expiry.
Обновление ядра до версии с исправлением — основной способ устранения уязвимости. Временные меры снижают вероятность, но не заменяют патч.
Официальные источники
- NVD — CVE-2026-97562
- FIRST EPSS — CVE-2026-97562
- smb: client: pin DFS superblock in iterator callback - kernel/git/stable/linux.git - Linux kernel stable tree
- smb: client: pin DFS superblock in iterator callback - kernel/git/stable/linux.git - Linux kernel stable tree
- smb: client: pin DFS superblock in iterator callback - kernel/git/stable/linux.git - Linux kernel stable tree
- smb: client: pin DFS superblock in iterator callback - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 30.09.2026 — Опубликована первая версия материала.
