CVE-2026-89547 в Linux Kernel: нарушение целостности памяти в SUNRPC и защита

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

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


В подсистеме SUNRPC ядра Linux обнаружена уязвимость, связанная с игнорированием ошибок при инициализации per-CPU счетчиков. При неудачном выделении памяти сервис продолжает работу с неинициализированными структурами, что приводит к тихому повреждению данных в памяти. Материал описывает механизм сбоя, условия воспроизведения и порядок проверки исправления.

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


Риск заключается в повреждении данных в памяти ядра при неудачном выделении ресурсов для per-CPU счетчиков в подсистеме SUNRPC. Эксплуатация требует локального доступа и специфических условий, что ограничивает практическую опасность.

  • CVSS 3.1: 8.1 (HIGH). Вектор: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H. Высокая оценка отражает потенциальный ущерб при успешном срабатывании, несмотря на сложность условий.
  • EPSS: 0,23% (процентиль 13,18%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
  • Тип атаки: Нарушение целостности памяти (memory corruption) через запись в неинициализированную область.
  • Доступность PoC: Публичные эксплойты и подтвержденная эксплуатация в реальных атаках не зафиксированы.

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


Затронуты версии ядра Linux, содержащие подсистему SUNRPC с уязвимой логикой в функции __svc_create(). Точный список версий определяется наличием конкретного исправления в дереве ядра.

  • Компонент: net/sunrpc/svc.c.
  • Критические функции: __svc_create(), svc_xprt_enqueue(), svc_handle_xprt(), svc_pool_wake_idle_thread().
  • Условие сборки: Ядро должно быть собрано с поддержкой SMP и соответствующих NFS-сервисов (nfsd, lockd).

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


Функция __svc_create() инициализирует три per-CPU счетчика, игнорируя коды возврата. При неудаче выделения памяти указатель fbc->counters остается равным NULL, а внутренние структуры (raw_spinlock_t, list_head, count) не инициализируются.

В результате сервис возвращается в состояние, где горячие пути обработки обращаются к невалидной памяти. Это нарушает базовый принцип проверки ошибок при выделении ресурсов в ядре.

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


При запуске RPC-сервиса (nfsd, lockd) происходит инициализация счетчиков. Если выделение памяти не удается, указатель остается NULL. При последующих операциях в svc_xprt_enqueue() и других функциях происходит запись в этот указатель.

Так как это per-CPU offset, обращение не вызывает сбой (fault), а записывает данные в начало per-CPU области текущего процессора. Это приводит к тихому повреждению переменных, находящихся по этому адресу. Чтение /proc/fs/nfsd/pool_stats также возвращает невалидные данные.

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


Для создания уязвимого состояния требуется неудача выделения per-CPU памяти при старте RPC-сервера. Это состояние не может быть вызвано удаленным пользователем.

  • Доступ: Локальный администратор (root).
  • Условия: Высокое давление на память или активная инъекция сбоев (fault injection).
  • Среда: SMP-система с работающими NFS-сервисами.

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


Локальный администратор создает условия дефицита памяти или использует механизмы fault injection. При последующем запуске NFS-сервера инициализация счетчиков завершается ошибкой, но сервис запускается. При обработке первых RPC-запросов происходит повреждение памяти, что может привести к нестабильности системы или утечке данных.

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


Публичные PoC или подтвержденная эксплуатация в реальных атаках не зафиксированы. Ошибка имеет низкую вероятность эксплуатации (EPSS 0,23%) из-за строгих требований к условиям срабатывания и необходимости локального доступа.

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


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

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


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

  • Логи: Проверка dmesg на ошибки в SUNRPC или NFS.
  • Статистика: Мониторинг аномальных значений в /proc/fs/nfsd/pool_stats.
  • Система: Контроль стабильности NFS-сервисов под нагрузкой.

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


Для проверки версии ядра и наличия исправлений используйте следующие команды. Замените <имя-пакета> на актуальное имя пакета ядра в вашей дистрибуции.

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

Проверьте, содержит ли текущая версия ядра коммиты с исправлением, упомянутые в официальных источниках.

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


Единственным надежным способом устранения уязвимости является обновление ядра до версии, содержащей исправление. Патч добавляет проверку кодов возврата при инициализации счетчиков и корректную очистку ресурсов при ошибке.

  • Действие: Обновите ядро до последней стабильной версии.
  • Источники: Используйте официальные репозитории дистрибутива.
  • Проверка: Убедитесь, что новые коммиты присутствуют в дереве ядра.

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


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

  • Ограничение доступа: Ограничьте права на запуск NFS-сервисов.
  • Мониторинг: Усиленный контроль за состоянием памяти и стабильностью NFS.

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


После обновления ядра проверьте, что сервисы NFS работают корректно и статистика в /proc/fs/nfsd/pool_stats возвращает валидные данные. Убедитесь, что в логах отсутствуют ошибки инициализации SUNRPC.

Bash:
cat /proc/fs/nfsd/pool_stats
dmesg | grep -i sunrpc

Отсутствие ошибок и корректная работа сервисов подтверждают применение исправления.

Вывод​


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

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


  1. NVD — CVE-2026-89547
  2. FIRST EPSS — CVE-2026-89547
  3. SUNRPC: Check svc pool percpu counter allocation - kernel/git/stable/linux.git - Linux kernel stable tree
  4. SUNRPC: Check svc pool percpu counter allocation - kernel/git/stable/linux.git - Linux kernel stable tree
  5. SUNRPC: Check svc pool percpu counter allocation - kernel/git/stable/linux.git - Linux kernel stable tree
  6. SUNRPC: Check svc pool percpu counter allocation - kernel/git/stable/linux.git - Linux kernel stable tree
  7. CVEs — The Linux Kernel documentation

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


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