CVE-2026-89712 в Linux Kernel: use-after-free в NFSD при межсерверном копировании

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 остается высоким. Администраторам рекомендуется как можно скорее обновить ядро до актуальных версий, содержащих исправление.

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


  1. NVD — CVE-2026-89712
  2. FIRST EPSS — CVE-2026-89712
  3. NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
  4. NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
  5. NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
  6. NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
  7. NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
  8. NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
  9. NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock - kernel/git/stable/linux.git - Linux kernel stable tree
  10. 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 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ