CVE-2026-89679 в Linux Kernel: удаленный DoS в NFSv4, уязвимые версии и защита

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

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


В модуле NFSv4 сервера Linux обнаружена уязвимость, позволяющая любому удаленному клиенту вызвать сбой ядра (kernel oops). Ошибка возникает при обработке специальных идентификаторов состояния (stateid) в функции nfsd4_setattr и приводит к обращению по нулевому указателю. Материал описывает механику сбоя, условия эксплуатации и способы проверки наличия исправления в системе.

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


Риск представляет собой удаленный отказ в обслуживании (DoS) для систем, предоставляющих NFSv4-сервис. Атакующему не требуется аутентификация или предварительное состояние, что делает эксплуатацию тривиальной для любого клиента в сети.

  • Тип ошибки: Обращение по нулевому указателю (NULL pointer dereference) в функции nfsd4_setattr.
  • 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. Не нужны учетные данные, делегирование или созданные ранее stateid.
  • Эксплуатация: Подтверждена техническим описанием в патче. Публичный PoC или подтвержденная эксплуатация в реальных атаках в источниках не указаны.
  • EPSS: 0,24% (процентиль 14,81%). Низкая вероятность эксплуатации в ближайшие 30 дней, что не отменяет необходимости патча для критичных сервисов.

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


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

  • Компонент: fs/nfsd/nfs4proc.c (модуль NFSv4 сервера).
  • Исходный код: Ошибка была введена в коммите 7e13f4f8d27d ("nfsd: handle delegated timestamps in SETATTR").
  • Исправление: Патч fe456c8c0931bb3e8a03d429920e87fd85747fba и его backports в stable-ветки.

Администраторам следует проверить наличие коммита fe456c8c0931bb3e8a03d429920e87fd85747fba в истории ядра своей системы. Если ядро собрано из исходников, необходимо убедиться, что применен патч. Для дистрибутивов — проверить наличие обновлений от вендора.

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


Причина ошибки кроется в логике обработки специальных идентификаторов состояния (special stateids) в функции nfs4_preprocess_stateid_op. Когда клиент отправляет "one stateid" (все байты 0xFF), функция check_special_stateids возвращает nfs_ok, но не заполняет выходной указатель nfs4_stid.

В результате локальная переменная st в nfsd4_setattr остается равной NULL. Однако код, обрабатывающий атрибуты делегирования (deleg_attrs), не проверяет этот указатель на NULL перед обращением к его полям. Происходит чтение st->sc_type по адресу, смещенному на 4 байта от NULL, что вызывает сбой ядра.

Логическая ошибка заключается в том, что код предполагает, что если deleg_attrs истинно, то st обязательно должен быть валидным указателем на делегирование. Однако специальные stateid не являются делегированиями, и их обработка не гарантирует инициализацию указателя.

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


Атакующий отправляет NFSv4 COMPOUND-запрос, содержащий операции PUTROOTFH и SETATTR. В SETATTR используется "one stateid" (все 0xFF) и битовая карта атрибутов, включающая FATTR4_WORD2_TIME_DELEG_ACCESS или FATTR4_WORD2_TIME_DELEG_MODIFY.

Сервер обрабатывает запрос: nfsd4_setattr устанавливает флаг deleg_attrs и вызывает nfs4_preprocess_stateid_op. Для "one stateid" функция возвращает успех, но не заполняет указатель st. Далее код пытается проверить тип stateid через st->sc_type, что приводит к обращению по нулевому указателю и падению ядра.

Эксплуатация не требует аутентификации, так как проверка stateid происходит до проверки прав доступа. Атакующему достаточно иметь сетевой доступ к NFSv4-серверу.

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


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

  • Сетевой доступ к порту NFSv4 (по умолчанию 2049) на целевой системе.
  • Возможность отправки NFSv4-запросов от имени любого клиента (не требуется аутентификация).
  • Наличие уязвимого кода в ядре (отсутствие патча fe456c8c0931bb3e8a03d429920e87fd85747fba).

Не требуются:

  • Учетные данные или аутентификация.
  • Предварительно созданные stateid или делегирования.
  • Специфические права доступа к файлам.

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


Атакующий сканирует сеть и находит хост с открытым портом 2049 (NFSv4). Он формирует NFSv4 COMPOUND-запрос с операциями PUTROOTFH и SETATTR. В SETATTR он указывает "one stateid" (все 0xFF) и битовую карту, содержащую FATTR4_WORD2_TIME_DELEG_ACCESS.

Запрос отправляется на сервер. Ядро обрабатывает его и попадает в уязвимый код, где происходит обращение по нулевому указателю. Ядро падает (kernel oops), что приводит к перезагрузке системы или зависанию, в зависимости от настроек ядра.

Атакующий может повторять запросы для поддержания DoS-состояния.

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


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

Отсутствие сведений о массовых атаках не означает, что уязвимость не эксплуатируется. Учитывая простоту эксплуатации, риск атаки существует.

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


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

  • Аномальные NFSv4-запросы с "one stateid" (все 0xFF) и битовыми картами, содержащими FATTR4_WORD2_TIME_DELEG_ACCESS или FATTR4_WORD2_TIME_DELEG_MODIFY.
  • Сбои ядра (kernel oops) с сообщениями об обращении по нулевому указателю в nfsd4_setattr.
  • Повторяющиеся перезагрузки или зависания системы, совпадающие по времени с сетевой активностью на порту 2049.

Эти признаки неспецифичны и могут быть вызваны другими причинами, но в сочетании с сетевой активностью могут указывать на эксплуатацию CVE-2026-89679.

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


Для обнаружения атаки можно использовать:

  • Сетевой мониторинг: Анализ трафика NFSv4 на предмет запросов с "one stateid" и битовыми картами делегирования. Инструменты: tcpdump, nfsstat, специализированные IDS.
  • Мониторинг логов ядра: Поиск сообщений об ошибках в dmesg или /var/log/kern.log, содержащих nfsd4_setattr и NULL pointer dereference.
  • Мониторинг стабильности: Отслеживание частоты перезагрузок или зависаний системы, особенно если они совпадают с сетевой активностью.

Рекомендуется настроить алерты на аномальные NFSv4-запросы и сбои ядра в NFS-модуле.

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


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

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

Затем проверьте наличие коммита fe456c8c0931bb3e8a03d429920e87fd85747fba в истории ядра. Если ядро собрано из исходников, используйте git log в каталоге исходников. Для дистрибутивов — проверьте наличие обновлений от вендора, содержащих этот коммит.

Если вы не уверены, что ядро содержит патч, обратитесь к документации вашего дистрибутива или ядру Linux для подтверждения.

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


Единственный надежный способ устранения уязвимости — установка исправленного ядра. Патч fe456c8c0931bb3e8a03d429920e87fd85747fba добавляет проверку на NULL перед обращением к st->sc_type.

  • Для дистрибутивов: Установите последние обновления ядра от вашего вендора. Проверьте, что они содержат патч.
  • Для сборки из исходников: Примени патч fe456c8c0931bb3e8a03d429920e87fd85747fba и пересоберите ядро.
  • Для контейнеров: Обновите базовые образы до версий с исправленным ядром.

Не используйте cherry-pick отдельных патчей, если это не рекомендуется вендором. Лучше установить полное обновление ядра.

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


Пока не установлено исправленное ядро, можно временно снизить риск:

  • Ограничение доступа к NFSv4: Заблокируйте порт 2049 в файрволе для всех, кроме доверенных клиентов. Используйте IP-фильтрацию.
  • Отключение NFSv4: Если возможно, отключите NFSv4-сервис, оставив только NFSv3 (если он не уязвим) или отключив NFS полностью.
  • Использование VPN: Ограничьте доступ к NFSv4-серверу только через защищенный канал (VPN).

Эти меры не устраняют уязвимость, но снижают вероятность атаки. Они не заменяют установку патча.

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


После установки исправленного ядра проверьте:

  1. Версию ядра: Убедитесь, что запущено новое ядро (uname -r).
  2. Наличие патча: Проверьте, что коммит fe456c8c0931bb3e8a03d429920e87fd85747fba присутствует в истории ядра.
  3. Функциональность: Протестируйте NFSv4-сервис, убедившись, что он работает корректно.
  4. Отсутствие сбоев: Наблюдайте за системой в течение нескольких часов, убедившись, что нет kernel oops.

Если после обновления система стабильна и NFSv4 работает, уязвимость устранена.

Вывод​


CVE-2026-89679 — серьезная уязвимость, позволяющая удаленно вызвать сбой ядра Linux через NFSv4. Эксплуатация проста и не требует аутентификации, что делает ее опасной для любых систем, предоставляющих NFSv4-сервис.

Администраторам необходимо срочно установить исправленное ядро, содержащее патч fe456c8c0931bb3e8a03d429920e87fd85747fba. До этого следует ограничить доступ к NFSv4 и мониторить систему на предмет атак.

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


  1. NVD — CVE-2026-89679
  2. FIRST EPSS — CVE-2026-89679
  3. nfsd: fix null dereference in nfsd4_setattr for deleg timestamp attrs - kernel/git/stable/linux.git - Linux kernel stable tree
  4. nfsd: fix null dereference in nfsd4_setattr for deleg timestamp attrs - kernel/git/stable/linux.git - Linux kernel stable tree
  5. nfsd: fix null dereference in nfsd4_setattr for deleg timestamp attrs - kernel/git/stable/linux.git - Linux kernel stable tree
  6. CVEs — The Linux Kernel documentation

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


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