CVE-2026-93224 в Linux Kernel: svcrdma, unmatched rn_unregister и утечка при неудачном accept

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

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


Уязвимость CVE-2026-93224 затрагивает модуль svcrdma ядра Linux. При неудачном вызове svc_rdma_accept() блок очистки вызывает rpcrdma_rn_unregister() без проверки, была ли регистрация успешной.

Структура svcxprt_rdma выделяется через kzalloc(), поэтому sc_rn.rn_index равен 0, а sc_rn.rn_done равно NULL. Функция unregister удаляет чужой элемент из динамического массива rd_xa и уменьшает счётчик ссылок rd_kref без соответствующего увеличения.

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

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


Риск связан с ошибкой управления памятью в ядре Linux при обработке ошибок соединения RPC over RDMA. Ошибка возникает в коде очистки после неудачного accept() и влияет на стабильность процесса, использующего svcrdma.

  • Тип ошибки: некорректная очистка ресурсов (unmatched unregister) и утечка памяти
  • CVSS: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H — 8.1 HIGH
  • Вектор атаки: удалённый, без необходимости авторизации или взаимодействия с пользователем
  • Факт эксплуатации: не подтверждён в предоставленных источниках
  • EPSS: 0,45% (процентиль 36,73%)

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


Затронут модуль svcrdma ядра Linux, реализующий транспорт для RPC over RDMA. Конкретные версии пакетов и дистрибутивы не указаны в предоставленных источниках.

  • Компонент: net/sunrpc/xprtrdma/ib_client.c
  • Компонент: net/sunrpc/xprtrdma/svc_rdma_transport.c
  • Функции: svc_rdma_accept(), rpcrdma_rn_register(), rpcrdma_rn_unregister()
  • Состояние: уязвимость исправлена в ядре Linux, патч доступен в stable tree

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


Ошибка возникает в функции svc_rdma_accept() при переходе на путь обработки ошибок (errout). Если регистрация уведомления (rpcrdma_rn_register()) не завершилась успешно, существующий блок очистки вызывает rpcrdma_rn_unregister() без проверки состояния.

Структура svcxprt_rdma выделяется через kzalloc(), поэтому поля sc_rn.rn_index и sc_rn.rn_done обнуляются. При вызове unregister() на такой структуре происходит удаление чужого элемента из динамического массива (xa_erase()) по индексу 0 и уменьшение счётчика ссылок (kref_put()), что не соответствует реальному состоянию объекта.

Дополнительно, при неудачном accept() кривая очистка приводит к утечке памяти: svcxprt_rdma и net/ns_tracker остаются в системе, так как счётчик ссылок не достигает нуля.

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


Атака реализуется через удалённый вызов RPC over RDMA на сервере, использующем модуль svcrdma. При неудачном accept() (например, из-за ошибки сети или отказа в обработке соединения) срабатывает путь обработки ошибок.

В этом пути вызывается rpcrdma_rn_unregister() без проверки, была ли регистрация успешной. Функция удаляет элемент из динамического массива rd_xa по индексу rn_index и уменьшает счётчик ссылок rd_kref. Если регистрация не происходила, это приводит к удалению чужого элемента и нарушению целостности данных устройства.

Повторное вызывание unregister() на одной и той же структуре (или удаление элемента, который уже был удалён) может привести к повторному уменьшению счётчика ссылок, что в конечном итоге приведёт к утечке памяти или падению системы.

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


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

  • Сервер использует модуль svcrdma ядра Linux
  • Модуль свёрнут и активен (RPC over RDMA запущен)
  • Атакующий может инициировать соединение RPC over RDMA с сервером
  • Соединение завершается ошибкой, что вызывает путь обработки ошибок в svc_rdma_accept()
  • Нет необходимости в локальном доступе или авторизации

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


Атакующий отправляет запрос RPC over RDMA на сервер. Сервер пытается обработать соединение, но встречает ошибку (например, отказ в обработке или сетевая ошибка). При переходе на путь обработки ошибок вызывается очистка ресурсов.

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

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

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


В предоставленных источниках не указано наличие публичных эксплойтов, PoC или подтверждённой эксплуатации.

  • PoC: не указан в источниках
  • Техническое описание: доступно через патч ядра Linux (commit 26190394c64c9429481fc88a4738f70bb92fb352)
  • Подтверждённая эксплуатация: не подтверждена в предоставленных источниках

Патч доступен в stable tree ядра Linux и содержит исправление ошибки.

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


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

  • Неспецифичный признак: рост потребления памяти на серверах с активным RPC over RDMA
  • Неспецифичный признак: частые ошибки соединения в журналах ядра (RPC/RDMA)
  • Неспецифичный признак: падение системы или зависание при многократных неудачных соединениях
  • Неспецифичный признак: аномальные значения счётчиков ссылок в структуре rpcrdma_device

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


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

  • Проверка версии ядра Linux на наличие исправления (см. раздел «Проверка версии»)
  • Анализ журналов ядра на ошибки RPC/RDMA и утечку памяти
  • Мониторинг потребления памяти на серверах с активным RPC over RDMA
  • Проверка состояния модуля svcrdma через lsmod или modinfo

Примеры команд:

Bash:
uname -r
cat /proc/version
lsmod | grep svcrdma
modinfo svcrdma

Анализ журналов:

Bash:
dmesg | grep -i rpcrdma
dmesg | grep -i svcrdma
journalctl -k | grep -i rpcrdma

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


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

  • Проверка версии ядра:

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

  • Проверка загрузки модуля svcrdma:

Bash:
lsmod | grep svcrdma
modinfo svcrdma

  • Проверка наличия исправления в ядре (через git или дистрибуторские пакеты):

Bash:
git log --oneline --all | grep -i "svcrdma: Fix unmatched rn_unregister"
dpkg -l | grep linux-kernel  # для Debian/Ubuntu
rpm -qa | grep kernel  # для RHEL/CentOS/Fedora

Замените <имя-пакета> на имя пакета ядра в вашей системе при использовании dpg/rpm.

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


Исправление CVE-2026-93224 доступно в патче ядра Linux (commit 26190394c64c9429481fc88a4738f70bb92fb352).


Для применения исправления:

  1. Обновите ядро Linux до версии, содержащей патч
  2. Перезагрузите систему после обновления
  3. Проверьте наличие модуля svcrdma и его состояние

Альтернативный способ — применить патч вручную к исходному коду ядра (требуется компиляция ядра).

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


При невозможности немедленного обновления ядра можно использовать следующие временные меры:

  • Отключить модуль svcrdma, если RPC over RDMA не используется:

Bash:
modprobe -r svcrdma

  • Ограничить доступ к RPC over RDMA на сетевом уровне (firewall):

Bash:
iptables -A INPUT -p tcp --dport <порт-RPC> -j DROP
# или аналогично для UDP, если используется

  • Мониторинг потребления памяти и перезагрузка при аномальном росте
  • Ограничение количества одновременных соединений RPC over RDMA (через параметры ядра или конфигурацию сервиса)

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

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


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

  • Версию ядра и наличие патча:

Bash:
uname -r
git log --oneline --all | grep -i "svcrdma: Fix unmatched rn_unregister"

  • Состояние модуля svcrdma:

Bash:
lsmod | grep svcrdma
modinfo svcrdma

  • Отсутствие ошибок в журналах ядра после обновления:

Bash:
dmesg | grep -i rpcrdma
journalctl -k --since "1 hour ago" | grep -i rpcrdma

  • Функциональность RPC over RDMA (если используется):

Bash:
rpcinfo -p  # или аналогичная команда для проверки RPC-сервисов

Вывод​


CVE-2026-93224 — это уязвимость в модуле svcrdma ядра Linux, связанная с некорректной очисткой ресурсов при неудачном accept(). Ошибка приводит к удалению чужих элементов из динамических массивов и утечке памяти. Исправление доступно в патче ядра Linux.

Для администратора важно:

  1. Обновить ядро до версии с патчем
  2. Проверить наличие модуля svcrdma и его состояние
  3. При невозможности обновления — отключить модуль или ограничить доступ к RPC over RDMA
  4. Мониторинг потребления памяти и журналов ядра для обнаружения аномалий

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


  1. NVD — CVE-2026-93224
  2. FIRST EPSS — CVE-2026-93224
  3. svcrdma: Fix unmatched rn_unregister on failed accept - kernel/git/stable/linux.git - Linux kernel stable tree
  4. svcrdma: Fix unmatched rn_unregister on failed accept - kernel/git/stable/linux.git - Linux kernel stable tree
  5. svcrdma: Fix unmatched rn_unregister on failed accept - kernel/git/stable/linux.git - Linux kernel stable tree
  6. svcrdma: Fix unmatched rn_unregister on failed accept - kernel/git/stable/linux.git - Linux kernel stable tree
  7. CVEs — The Linux Kernel documentation

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


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