CVE-2026-89696 в Linux Kernel: NULL-указатель в nfsd, уязвимые версии и защита

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

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


В NFSv4.2-сервере Linux (nfsd) обнаружена уязвимость, позволяющая удаленному клиенту вызвать обнуление указателя (NULL pointer dereference) в ядре. Ошибка возникает при обработке COMPOUND-запросов с межсерверным COPY и некорректной проверкой foreign filehandle.

Уязвимость приводит к падению процесса nfsd и отказу в обслуживании. В статье разобран механизм атаки, затронутые версии и способы проверки исправления.

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


Уязвимость позволяет удаленному атакующему вызвать отказ в обслуживании (DoS) на NFS-сервере, эксплуатируя ошибку в обработке filehandle в модуле nfsd. Риск связан с падением процесса ядра при обработке специально сформированного сетевого запроса.

  • Тип ошибки: Обнуление указателя (NULL pointer dereference) в ядре Linux.
  • CVSS 3.1: 7.5 (HIGH). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. Оценивается как высокий риск из-за удаленной эксплуатации без аутентификации.
  • Условия атаки: Требуется, чтобы сервер поддерживал NFSv4.2 и была включена опция CONFIG_NFSD_V4_2_INTER_SSC.
  • Эксплуатация: Подтверждена техническим описанием в патче. Публичный PoC в источниках не указан.
  • EPSS: 0,67% (процентиль 50,02%). Вероятность эксплуатации в дикой природе оценивается как низкая на текущий момент.

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


Уязвимость затрагивает ядро Linux, в котором включена поддержка NFSv4.2 с межсерверным копированием (inter-SSC COPY). Конкретные версии дистрибутивов в предоставленных данных не перечислены, однако патч был применен в стабильных ветках ядра.

  • Компонент: fs/nfsd/nfs4proc.c (модуль NFS server daemon).
  • Условие сборки: CONFIG_NFSD_V4_2_INTER_SSC должна быть включена.
  • Исправление: Патч c59738a00aa51b16adc1b5ceb7c80877168efb4d и его бэкпорты в стабильные ветки (например, 00c84f4eec715e501efc080a5670114189e42507).

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


Причина ошибки заключается в недостаточной валидации состояния filehandle в цикле обработки COMPOUND-запросов в nfsd4_proc_compound(). Когда nfsd4_putfh() возвращает успех, но fh_dentry и fh_export остаются NULL (из-за nfserr_stale и флага no_verify), устанавливается флаг NFSD4_FH_FOREIGN.

Исходный код использовал этот флаг только для обхода проверки nfserr_nofilehandle, но не блокировал выполнение последующих операций. В результате, если клиент вставлял между PUTFH и SAVEFH операцию, требующую доступа к файлу (например, SETATTR), она обращалась к fh_export->ex_path.mnt без предварительной проверки, что приводило к обнулению указателя.

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


Атакующий формирует COMPOUND-запрос, содержащий межсерверный COPY (inter-SSC). Функция check_if_stalefh_allowed() устанавливает no_verify=true для сохраненного PUTFH. Это позволяет nfsd4_putfh() завершиться успешно, оставив fh_dentry равным NULL.

В COMPOUND-запросе между исходным PUTFH и SAVEFH вставляется операция, которая вызывает fh_want_write() (например, SETATTR). Эта функция обращается к fh_export->ex_path.mnt без вызова fh_verify(). Поскольку fh_export равен NULL, происходит обнуление указателя в потоке nfsd, что приводит к падению процесса и отказу в обслуживании.

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


Для успешной эксплуатации уязвимости необходимо соблюдение следующих условий:

  • Сервер работает с включенным NFSv4.2.
  • В конфигурации ядра включена опция CONFIG_NFSD_V4_2_INTER_SSC.
  • Атакующий имеет сетевой доступ к порту NFS (по умолчанию 2049).
  • Клиент может отправлять произвольные COMPOUND-запросы с вложенными операциями.

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


Атакующий подключается к NFS-серверу и отправляет COMPOUND-запрос. В запросе указывается межсерверный COPY, который инициирует сохранение PUTFH с флагом no_verify.

Далее в тот же COMPOUND добавляется операция SETATTR, направленная на тот же filehandle. При обработке запроса ядро устанавливает NFSD4_FH_FOREIGN, но не блокирует SETATTR.

Функция fh_want_write() пытается прочитать fh_export->ex_path.mnt, получив NULL. Происходит сбой в ядре (kernel panic или oops), процесс nfsd завершается. Сервер становится недоступен для других клиентов, пока процесс не будет перезапущен.

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


В предоставленных источниках отсутствует информация о публичном PoC или подтвержденной эксплуатации в реальных атаках. Однако техническое описание атаки и патч доступны в репозитории ядра Linux. Ошибка была исправлена в коммите c59738a00aa51b16adc1b5ceb7c80877168efb4d, что подтверждает ее реальность и возможность эксплуатации.

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


Специфичные IOC для этой уязвимости в источниках не указаны. Общие признаки атаки включают:

  • Падение процесса nfsd или nfsd4 в логах ядра (dmesg, journalctl).
  • Записи о NULL pointer dereference в стеке вызовов, содержащем nfsd4_proc_compound или fh_want_write.
  • Аномальные COMPOUND-запросы в логах NFS-сервера (если включено логирование).
  • Внезапная недоступность NFS-шара без видимых причин на стороне клиента.

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


Для обнаружения атаки рекомендуется анализировать логи ядра и NFS-сервера. Ищите сообщения об ошибках, связанные с обнулением указателя в модуле nfsd.

  • Проверьте dmesg или journalctl -k на наличие строк NULL pointer dereference и nfsd.
  • Мониторьте состояние процесса nfsd на предмет аварийных завершений.
  • Если доступно, анализируйте сетевой трафик на предмет COMPOUND-запросов с аномальной последовательностью операций (PUTFH -> SETATTR -> SAVEFH).

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


Для проверки версии ядра и наличия патча используйте следующие команды:

Bash:
uname -r
uname -a
cat /proc/version

Сравните полученную версию с версиями, содержащими коммит c59738a00aa51b16adc1b5ceb7c80877168efb4d или его бэкпорты. Если ядро собрано из исходников, проверьте наличие патча в истории git.

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


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

  • Обновите ядро до последней стабильной версии вашего дистрибутива.
  • Убедитесь, что в ядре присутствует коммит c59738a00aa51b16adc1b5ceb7c80877168efb4d или его бэкпорты (например, 00c84f4eec715e501efc080a5670114189e42507).
  • После обновления перезагрузите систему для применения нового ядра.

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


Если обновление ядра невозможно, рассмотрите следующие временные меры:

  • Отключите поддержку NFSv4.2, если это допустимо в вашей инфраструктуре.
  • Отключите опцию CONFIG_NFSD_V4_2_INTER_SSC при пересборке ядра (если возможно).
  • Ограничьте доступ к NFS-серверу на уровне файрвола, разрешая соединения только от доверенных IP-адресов.
  • Используйте NFSv4.0 или NFSv4.1, если они поддерживаются вашими клиентами и не требуют inter-SSC COPY.

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


После обновления ядра проверьте, что патч применен:

Bash:
grep -r "block non-SAVEFH ops after FOREIGN PUTFH" /boot/config-$(uname -r)

Также убедитесь, что процесс nfsd работает стабильно и не завершается аварийно при нагрузке. Проведите тестирование NFS-шара с использованием стандартных клиентов, чтобы убедиться в отсутствии регрессий.

Вывод​


CVE-2026-89696 представляет собой серьезную уязвимость в NFS-сервере Linux, позволяющую удаленному атакующему вызвать отказ в обслуживании. Ошибка была исправлена в ядре, и рекомендуется обновить системы до последних стабильных версий. Администраторам NFS-серверов следует проверить наличие патча и при необходимости применить временные меры защиты до обновления.

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


  1. NVD — CVE-2026-89696
  2. FIRST EPSS — CVE-2026-89696
  3. nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
  4. nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
  5. nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
  6. nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
  7. nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
  8. nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
  9. nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
  10. nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree

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


  • 13.09.2026 — Опубликована первая версия материала.
  • 13.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
  • 15.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ