CVE: CVE-2026-89712
Продукт: Linux Kernel
Дата публикации: 11.09.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,63%; процентиль 48,10%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В подсистеме NFSD ядра Linux обнаружена уязвимость, приводящая к обращению к освобожденной памяти (use-after-free). Дефект возникает в функции
nfsd4_ssc_expire_umount() из-за гонки условий при управлении списком отложенных размонтирований. Статья описывает механику ошибки, условия её проявления и способы проверки наличия исправления в установленном ядре.Основные характеристики
Риск связан с повреждением памяти в ядре при обработке межсерверного копирования NFS. При срабатывании дефекта возможна остановка системы или выполнение кода в контексте ядра.
- Тип ошибки: Use-after-free в функции
nfsd4_ssc_expire_umount().
- CVSS: 9.8 (CRITICAL), вектор
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
- EPSS: 0,63% (процентиль 48,11%).
- Эксплуатация: Публичные эксплойты не подтверждены.
- CISA KEV: Уязвимость не включена в каталог.
Какие продукты и версии затронуты
Уязвимость затрагивает ядра Linux, содержащие функцию отложенного размонтирования экспорта источника после завершения межсерверного копирования. Дефект был введен в коммите
f4e44b393389.- Компонент:
fs/nfsd/nfs4state.c.
- Функция:
nfsd4_ssc_expire_umount().
- Исправление: Внесено в ветки stable (Linux 6.12, 6.11, 6.10, 6.9, 6.6, 6.1, 5.15, 5.10).
Причина уязвимости
Причина дефекта заключается в некорректном управлении указателями при итерации по списку
nfsd_ssc_mount_list.Функция
nfsd4_ssc_expire_umount() использует макрос list_for_each_entry_safe, который сохраняет указатель на следующий элемент (tmp) до освобождения блокировки nfsd_ssc_lock. В момент, когда блокировка снята для выполнения mntput(), другой поток может удалить и освободить элемент, на который указывает tmp. При повторном захвате блокировки и продолжении итерации происходит обращение к уже освобожденной памяти.Как работает атака
Атака эксплуатирует гонку условий (race condition) между периодическим обработчиком истечения срока действия (expire worker) и потоками RPC, обрабатывающими ошибки монтирования.
- Периодическая задача
nfsd4_ssc_expire_umountначинает обход списка.
- Обнаруживая устаревший элемент, функция сохраняет указатель
tmpна следующий элемент и освобождаетnfsd_ssc_lock.
- В этот момент другой поток (например, при сбое монтирования) захватывает блокировку, удаляет элемент из списка и вызывает
kfree.
- Если освобожденный элемент совпадал с сохраненным
tmp, следующая итерация цикла обращается к невалидной памяти.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости необходимо наличие специфической конфигурации и совпадение временных окон.
- Конфигурация: Сервер должен использовать NFSv4.1 с поддержкой межсерверного копирования (inter-server copy).
- Состояние: Должно происходить завершение копирования и последующее отложенное размонтирование источника.
- Гонка: Поток RPC должен одновременно с expire worker обрабатывать сбой монтирования и удалять элемент из списка.
Возможный сценарий атаки
Сценарий предполагает, что злоумышленник инициирует межсерверное копирование файлов через NFS-сервер.
После завершения операции сервер планирует размонтирование источника. В момент, когда периодическая задача начинает освобождать ресурсы, злоумышленник может вызвать сбой в другом потоке (например, через некорректный запрос или сетевые условия).
Это приводит к тому, что поток RPC освобождает элемент списка в тот момент, когда expire worker сохраняет на него указатель. Результатом становится обращение к освобожденной памяти, что может привести к падению ядра или выполнению кода.
Есть ли публичный эксплойт
На момент публикации CVE-2026-89712 публичные эксплойты в открытом доступе не зафиксированы. В каталоге CISA KEV уязвимость не числится. Наличие исправлений в ветках stable указывает на то, что проблема была устранена до начала массовой эксплуатации.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для данной уязвимости не опубликованы. Для обнаружения аномалий следует использовать общие методы мониторинга состояния ядра.
- Крэши ядра: Записи в
dmesgилиjournalctlс ошибкамиBUG: unable to handle page faultилиgeneral protection faultв модулеnfsd.
- Аномальные процессы: Внезапное завершение работы NFS-сервера или зависание RPC-потоков.
Как обнаружить атаку
Для обнаружения эксплуатации или срабатывания уязвимости рекомендуется анализировать логи ядра.
- Проверка логов:
dmesg | grep -i "nfsd\|BUG\|page fault".
- Мониторинг стабильности: Отслеживание падений ядра (kernel panics) на серверах, использующих NFSv4.1 с inter-server copy.
- Аудит конфигурации: Проверка, включена ли поддержка межсерверного копирования в экспортах NFS.
Как проверить свою версию
Для определения версии ядра и проверки наличия исправлений используйте следующие команды.
- Версия ядра:
uname -rилиuname -a.
- Детали сборки:
cat /proc/version.
- Проверка патча: Сравните версию ядра с релизами, содержащими коммит
036c1b182f4da65363e79ec0ac276edc6b7296e5.
Исправление
Единственным надежным способом устранения уязвимости является обновление ядра до версии, содержащей исправление.
- Linux 6.12: Коммит
036c1b182f4da65363e79ec0ac276edc6b7296e5.
- Linux 6.11: Коммит
2b59029b8f24a99b5d844af2da3950d39d36eeea.
- Linux 6.10: Коммит
4ed8d2317aef21cc2a9e5a55d6b59860b4b151a8.
- Linux 6.9: Коммит
60680ae7243b22de3d09be990d8e23bcfc4af837.
- Linux 6.6: Коммит
659ee3da073164e1e6e40dfcbc26eeed85845f93.
- Linux 6.1: Коммит
7377fa964b8aaf47cb04e5efcc4c82d15e8c2ce9.
- Linux 5.15: Коммит
77de363d9a1c8cd35f20482782c612cda085791a.
- Linux 5.10: Коммит
d9e151fea5ed706c1284adacabd869b0be745db2.
Временные меры защиты
Полностью устранить риск без обновления ядра невозможно. В качестве временной меры можно ограничить использование уязвимой функциональности.
- Отключение inter-server copy: Если бизнес-процессы не требуют межсерверного копирования, отключите эту опцию в конфигурации NFS-экспорта.
- Изоляция: Ограничьте сетевой доступ к NFS-серверам до доверенных узлов, если обновление невозможно в краткосрочной перспективе.
Как проверить устранение уязвимости
После обновления ядра необходимо убедиться, что исправление применено.
- Проверка версии: Убедитесь, что
uname -rвозвращает версию, содержащую соответствующий коммит.
- Проверка логов: Убедитесь, что после перезагрузки не появляются новые ошибки в модуле
nfsd.
- Функциональное тестирование: Проведите тестирование межсерверного копирования в тестовой среде для подтверждения работоспособности.
Вывод
CVE-2026-89712 является критической уязвимостью, требующей оперативного устранения. Несмотря на сложность условий для эксплуатации, риск для серверов с включенным inter-server copy остается высоким. Администраторам рекомендуется как можно скорее обновить ядро до актуальных версий, содержащих исправление.
Официальные источники
- NVD — CVE-2026-89712
- FIRST EPSS — CVE-2026-89712
- NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
- NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
- NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
- NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
- NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
- NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
- NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
- NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 14.09.2026 — Опубликована первая версия материала.
- 15.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
