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-серверов следует проверить наличие патча и при необходимости применить временные меры защиты до обновления.
Официальные источники
- NVD — CVE-2026-89696
- FIRST EPSS — CVE-2026-89696
- nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
- nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
- nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
- nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
- nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
- nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
- nfsd: block non-SAVEFH ops after FOREIGN PUTFH to prevent NULL deref - kernel/git/stable/linux.git - Linux kernel stable tree
- 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 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
