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).
- Патч: svcrdma: Fix unmatched rn_unregister on failed accept
- Коммит: 26190394c64c9429481fc88a4738f70bb92fb352
- Автор: Chris Mason [email protected]
- Дата коммита: 2026-05-27
- Коммиттер: Greg Kroah-Hartman [email protected] (stable) или Chuck Lever [email protected] (upstream)
Для применения исправления:
- Обновите ядро Linux до версии, содержащей патч
- Перезагрузите систему после обновления
- Проверьте наличие модуля 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.
Для администратора важно:
- Обновить ядро до версии с патчем
- Проверить наличие модуля svcrdma и его состояние
- При невозможности обновления — отключить модуль или ограничить доступ к RPC over RDMA
- Мониторинг потребления памяти и журналов ядра для обнаружения аномалий
Официальные источники
- NVD — CVE-2026-93224
- FIRST EPSS — CVE-2026-93224
- svcrdma: Fix unmatched rn_unregister on failed accept - kernel/git/stable/linux.git - Linux kernel stable tree
- svcrdma: Fix unmatched rn_unregister on failed accept - kernel/git/stable/linux.git - Linux kernel stable tree
- svcrdma: Fix unmatched rn_unregister on failed accept - kernel/git/stable/linux.git - Linux kernel stable tree
- svcrdma: Fix unmatched rn_unregister on failed accept - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 26.09.2026 — Опубликована первая версия материала.
