CVE-2026-74730 в Linux Kernel: use-after-free в NFS и защита

CVE: CVE-2026-74730
Продукт: Linux Kernel
Дата публикации: 22.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,51%; процентиль 41,31%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В подсистеме NFSv4 ядра Linux обнаружен дефект use-after-free, связанный с операцией FREE_STATEID. Проблема возникает из-за отсутствия фиксации ссылок на объект struct nfs_server во время асинхронного выполнения RPC-задач. Статья разбирает механику ошибки, условия её проявления и способы верификации исправления в ядре.

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


Риск связан с нарушением управления жизненным циклом объектов в ядре, что может привести к повреждению памяти и выполнению кода. Ошибка затрагивает клиентскую часть NFSv4 и проявляется при задержке асинхронных операций.

  • Тип ошибки: Use-after-free (CWE-416).
  • CVSS 3.1: 9.8 (CRITICAL), вектор CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
  • Условия атаки: Сеть, низкая сложность, без привилегий и взаимодействия пользователя.
  • Эксплуатация: Подтверждено локально разработчиком, публичный PoC не опубликован.
  • EPSS: 0,51% (процентиль 41,31%).

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


Уязвимость затрагивает ядра Linux, содержащие асинхронную реализацию функции nfs41_free_stateid, введённую в коммите 7c1d5fae4a87. Точные номера версий ядра, в которых присутствует дефект, не указаны в предоставленных источниках.

  • Компонент: Подсистема NFSv4 (fs/nfs/nfs4proc.c).
  • Функция: nfs41_free_stateid и nfs41_free_stateid_release.
  • Статус: Исправление внесено в mainline и backported в stable-ветки (коммит cf616096a0f3a2b60f7d68b6b39674a6867ded9c и его порты).

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


Причина дефекта — отсутствие фиксации (pinning) объекта struct nfs_server на время выполнения асинхронной операции FREE_STATEID. Когда операция задерживается, объект может быть освобождён из памяти, в то время как асинхронный вызов всё ещё ссылается на него.

В исходном коде функция nfs41_free_stateid не увеличивала счётчик ссылок на struct nfs_server перед запуском RPC-задачи. Это нарушало инвариант безопасности: объект не должен быть уничтожен, пока на него есть активные ссылки из асинхронных обработчиков.

Исправление добавляет вызов nfs_sb_active для фиксации объекта и nfs_sb_deactive в функции освобождения nfs41_free_stateid_release, что гарантирует сохранность памяти до завершения операции.

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


Атакующий инициирует операцию FREE_STATEID в NFSv4, которая выполняется асинхронно. Если операция задерживается (например, из-за сетевых проблем или нагрузки), объект struct nfs_server может быть освобождён другим потоком или подсистемой.

После освобождения памяти асинхронный обработчик продолжает использовать указатель на struct nfs_server, что приводит к use-after-free. Это позволяет атакующему повредить данные ядра, изменить указатели или выполнить код с привилегиями ядра.

Механизм эксплуатации зависит от возможности контроля над освобождённой памятью и задержкой операции. В описании CVE указано, что разработчик смог воспроизвести сбой, но детали успешной эксплуатации в реальных условиях не раскрыты.

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


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

  • Система использует NFSv4 и подключена к NFS-серверу.
  • Операция FREE_STATEID задерживается, создавая временное окно для освобождения объекта.
  • Атакующий имеет возможность инициировать NFS-операции или влиять на сетевую задержку.
  • В системе отсутствует исправление, фиксирующее struct nfs_server во время асинхронного вызова.

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


Атакующий подключается к NFSv4-шаре и инициирует операцию освобождения stateid. Одновременно он создаёт условия для задержки RPC-вызова (например, через сетевые ограничения). В это время ядро освобождает объект struct nfs_server, так как ссылок на него нет.

Асинхронный обработчик nfs41_free_stateid_release срабатывает и обращается к уже освобождённой памяти. Атакующий может использовать этот сбой для повреждения структуры данных или выполнения кода. Сценарий требует точного тайминга и контроля над памятью, что делает эксплуатацию сложной, но возможной.

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


Публичный эксплойт не опубликован. В описании CVE указано, что разработчик (Dan Aloni) смог воспроизвести сбой use-after-free, но это является техническим подтверждением наличия дефекта, а не готовым PoC для удалённой атаки.

  • PoC: Не опубликован.
  • Техническое описание: Подтверждено в коммите исправления.
  • Эксплуатация в реальных атаках: Не подтверждена.

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


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

  • Необычные задержки в NFS-операциях.
  • Сбои ядра (kernel panic) или ошибки в dmesg с упоминанием nfs41_free_stateid.
  • Аномальная активность в NFS-сервере (много запросов FREE_STATEID).

Эти признаки неспецифичны и могут быть вызваны другими проблемами.

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


Для обнаружения атаки или сбоев, связанных с этой уязвимостью, рекомендуется:

  • Мониторинг dmesg и журналов ядра на ошибки NFS.
  • Анализ сетевых логов NFS-сервера на аномальные паттерны запросов.
  • Проверка целостности ядра после сбоев.

Специфичные сигнатуры для IDS/IPS не опубликованы, поэтому детекция основывается на общих признаках нестабильности NFS-клиента.

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


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

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

Сравните версию с официальными релизами, содержащими коммит cf616096a0f3a2b60f7d68b6b39674a6867ded9c. Точные номера версий пакетов не указаны в источниках, поэтому сверка должна проводиться с релизными заметками дистрибутива.

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


Единственный надёжный способ устранения уязвимости — обновление ядра до версии, содержащей исправление.

  • Коммит исправления: cf616096a0f3a2b60f7d68b6b39674a6867ded9c (mainline) и его backports в stable-ветки.
  • Действия: Обновите ядро через пакетный менеджер дистрибутива.
  • Проверка: Убедитесь, что в ядре присутствует функция nfs_sb_active в nfs41_free_stateid.

Не используйте временные обходные пути как постоянное решение.

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


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

  • Ограничьте доступ к NFSv4-шарам до доверенных хостов.
  • Отключите NFSv4, если это допустимо в инфраструктуре.
  • Увеличьте сетевые таймауты для NFS, чтобы снизить вероятность задержек.

Эти меры не устраняют уязвимость, но могут затруднить эксплуатацию.

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


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

Bash:
grep -r "nfs_sb_active" /boot/config-$(uname -r)

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

Вывод​


CVE-2026-74730 — критическая уязвимость в NFSv4, требующая немедленного обновления ядра. Механизм use-after-free может привести к выполнению кода, но эксплуатация требует специфичных условий. Администраторы должны проверить версии ядра и применить патч, а также усилить мониторинг NFS-клиентов.

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


  1. NVD — CVE-2026-74730
  2. FIRST EPSS — CVE-2026-74730
  3. NFS: Pin the 'struct nfs_server' during a FREE_STATEID call - kernel/git/stable/linux.git - Linux kernel stable tree
  4. NFS: Pin the 'struct nfs_server' during a FREE_STATEID call - kernel/git/stable/linux.git - Linux kernel stable tree
  5. NFS: Pin the 'struct nfs_server' during a FREE_STATEID call - kernel/git/stable/linux.git - Linux kernel stable tree
  6. NFS: Pin the 'struct nfs_server' during a FREE_STATEID call - kernel/git/stable/linux.git - Linux kernel stable tree
  7. NFS: Pin the 'struct nfs_server' during a FREE_STATEID call - kernel/git/stable/linux.git - Linux kernel stable tree
  8. NFS: Pin the 'struct nfs_server' during a FREE_STATEID call - kernel/git/stable/linux.git - Linux kernel stable tree
  9. NFS: Pin the 'struct nfs_server' during a FREE_STATEID call - kernel/git/stable/linux.git - Linux kernel stable tree
  10. NFS: Pin the 'struct nfs_server' during a FREE_STATEID call - kernel/git/stable/linux.git - Linux kernel stable tree

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


  • 27.08.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ