CVE: CVE-2026-93228
Продукт: Linux Kernel
Дата публикации: 24.09.2026
Критичность: CRITICAL
CVSS: 9.1 (3.1)
EPSS: нет данных; процентиль нет данных
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
Уязвимость CVE-2026-93228 затрагивает модуль svcrdma в Linux Kernel. Проблема возникает, когда удалённый peer отправляет Write или Reply chunk с нулевым segcount.
Проверка xdr_check_write_chunk() пропускает значение 0, после чего xdr_inline_decode(stream, 0) не сдвигает курсор, а pcl_alloc_write() добавляет в список rc_write_pcl или rc_reply_pcl объект svc_rdma_chunk с ch_segcount == 0.
Патч добавляет явное отклонение нулевого segcount на границе декодирования и перестраивает порядок добавления chunk в список после заполнения массива сегментов.
Основные характеристики
Риск связан с приёмом некорректного XDR-фрагмента RPC/RDMA-сервисом: нулевой segcount проходит проверку диапазона, создаёт вырожденный объект в списке parsed chunks и остаётся видимым для потребителей.
Проблема подтверждена патчами ядра Linux и описана как критическая по CVSS 3.1.
- Тип риска: обработка некорректного входного данных в svcrdma; нулевой segcount создаёт chunk с ch_segcount == 0
- CVSS:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H, оценка 9.1, severity CRITICAL
- Вектор атаки: удалённый peer может отправить Write или Reply chunk с segcount == 0 без необходимости локального доступа и без взаимодействия пользователя
- Факт эксплуатации: в предоставленных источниках нет подтверждения реальных эксплуатаций; есть патч и техническое описание механизма
- EPSS: данные отсутствуют
Какие продукты и версии затронуты
Затронут Linux Kernel с компонентом svcrdma, реализующим RPC/RDMA.
Патч модифицирует файлы
net/sunrpc/xprtrdma/svc_rdma_pcl.c и net/sunrpc/xprtrdma/svc_rdma_recvfrom.c. В предоставленных источниках нет перечня конкретных версий ядра или дистрибутивов, поэтому точный диапазон уязвимых релизов не подтверждается.- Компонент: svcrdma в Linux Kernel
- Файлы патча:
net/sunrpc/xprtrdma/svc_rdma_pcl.c,net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
- Версии ядра: не раскрыты в предоставленных источниках
- Дистрибутивы: не раскрыты в предоставленных источниках
Причина уязвимости
Функция xdr_check_write_chunk() проверяет только верхнюю границу segcount:
segcount > rctxt->rc_maxpages. Значение 0 проходит проверку, после чего вызывается xdr_inline_decode(&rctxt->rc_stream, 0).Этот вызов возвращает текущий курсор без сдвига и не изменяет состояние потока.
Далее pcl_alloc_write() создаёт chunk через pcl_alloc_chunk(segcount, 0) и добавляет его в список rc_write_pcl или rc_reply_pcl. При segcount == 0 цикл заполнения массива сегментов не выполняется, но объект chunk остаётся в списке с ch_segcount == 0.
Патч меняет проверку на
segcount == 0 || unlikely(segcount > rctxt->rc_maxpages), что приводит к возврату false и отклонению фрагмента до добавления в список. Дополнительно перемещается вызов list_add_tail() после цикла заполнения сегментов, чтобы в список попадал только полностью заполненный chunk.Как работает атака
Удалённый peer подключается к RPC/RDMA-сервису и отправляет XDR-фрагмент типа Write или Reply. Поле segcount в этом фрагменте равно 0.
В xdr_check_write_chunk() значение 0 не отклоняется, потому что проверка только сравнивает его с rc_maxpages. Функция xdr_inline_decode(stream, 0) завершается успешно и возвращает true.
Далее pcl_alloc_write() вызывает pcl_alloc_chunk(0, 0). Цикл
for (j = 0; j < segcount; j++) не выполняется. До патча list_add_tail(&chunk->ch_list, &pcl->cl_chunks) вызывался до цикла, поэтому chunk с ch_segcount == 0 добавлялся в список parsed chunks.После этого потребители могут получить доступ к вырожденному объекту через rc_write_pcl или rc_reply_pcl. В исходном описании патча указано, что предыдущий патч сделал pcl_for_each_segment() безопасным для ch_segcount == 0, поэтому текущая проблема не приводит к обходу памяти в том виде, как это могло быть ранее.
Патч добавляет отклонение нулевого segcount на границе декодирования и перестраивает порядок операций так, чтобы list_add_tail() выполнялся после заполнения сегментов.
Условия успешной эксплуатации
Для воспроизведения механизма из патча нужны следующие условия:
- RPC/RDMA-сервис: активен компонент svcrdma в ядре Linux
- Удалённый доступ: peer может отправлять XDR-фрагменты Write или Reply
- Поле segcount == 0: фрагмент содержит нулевой segcount
- Отсутствие отклонения: версия ядра не содержит патч, добавляющий проверку
segcount == 0в xdr_check_write_chunk()
- Список parsed chunks: chunk с ch_segcount == 0 попадает в rc_write_pcl или rc_reply_pcl
Возможный сценарий атаки
Сценарий описан на уровне механизма из патча и не подтверждается как реально используемый атакой.
- Удалённый peer отправляет RPC/RDMA-запрос с XDR-фрагментом Write или Reply.
- Поле segcount в фрагменте равно 0.
- Функция xdr_check_write_chunk() пропускает проверку и возвращает true.
- Функция pcl_alloc_write() создаёт chunk с ch_segcount == 0.
- До патча list_add_tail() добавляет этот chunk в список parsed chunks до заполнения сегментов.
- Потребитель получает доступ к вырожденному объекту через rc_write_pcl или rc_reply_pcl.
Патч меняет порядок: сначала заполняется массив сегментов, затем вызывается list_add_tail(). При segcount == 0 фрагмент отклоняется до добавления в список.
Есть ли публичный эксплойт
В предоставленных источниках нет отдельного PoC, эксплойта или подтверждения реальной эксплуатации.
Есть патч ядра Linux с техническим описанием механизма и диффами. Патч показывает, как изменить проверку segcount == 0 и перестроить порядок добавления chunk в список. Это позволяет понять механику проблемы, но не является подтверждённым инструментом атаки.
Отсутствие сведений о PoC или эксплуатации не означает их отсутствие; оно означает, что в данном пакете доказательств они не представлены.
Признаки эксплуатации
Специфичных IOC для CVE-2026-93228 в предоставленных источниках нет. Ниже приведены общие точки контроля, которые можно использовать при подозрении на аномальную работу RPC/RDMA-сервиса.
- Аномальные XDR-фрагменты: фрагменты Write или Reply с segcount == 0 в трафике RPC/RDMA
- Вырожденные объекты в памяти: chunk с ch_segcount == 0 в списках rc_write_pcl или rc_reply_pcl, если доступен debug-инструментарий
- Аномальная нагрузка на svcrdma: рост числа обработанных XDR-фрагментов без соответствующего изменения RPC-нагрузки
- Необычные ошибки декодирования: возврат false из xdr_check_write_chunk() или xdr_check_reply_chunk() после изменения поведения патча
- Отсутствие специфичных сигнатур: в предоставленных источниках нет подтверждённых IOC, поэтому перечисленные признаки являются неспецифичными
Как обнаружить атаку
Для обнаружения аномалий можно использовать следующие методы.
- Локальная проверка версии ядра: определить, установлен ли патч CVE-2026-93228 в текущем ядре
- Анализ трафика RPC/RDMA: искать XDR-фрагменты Write или Reply с segcount == 0
- Проверка логов ядра: искать сообщения об отклонении некорректных XDR-фрагментов после применения патча
- Debug-инструментарий: если доступен, проверять состояние rc_write_pcl и rc_reply_pcl на наличие chunk с ch_segcount == 0
- Общие точки контроля: при отсутствии специфичных IOC использовать мониторинг аномальной нагрузки и ошибок декодирования в svcrdma
Как проверить свою версию
Команды проверки версии ядра из пакета доказательств:
Bash:
uname -r
Bash:
uname -a
Bash:
cat /proc/version
Эти команды показывают версию ядра, но не подтверждают наличие патча CVE-2026-93228. Для проверки патча нужно сравнивать текущую версию с релизами, содержащими commit
45dbdb2637b7fc5f1355b588780d2a7fb0516805 или его upstream-версию 9808eb7656666acc7291bae9ab6b987bd16e47e0. В предоставленных источниках нет списка дистрибутивных пакетов с патчем.Для проверки в git-репозитории можно использовать:
Bash:
git log --oneline --all | grep -i "svcrdma: Reject Write/Reply chunks with segcount 0"
или искать конкретный commit:
Bash:
git rev-list --contains 9808eb7656666acc7291bae9ab6b987bd16e47e0
Исправление
Основной способ исправления — применение патча ядра Linux, который добавляет проверку
segcount == 0 в xdr_check_write_chunk() и перестраивает порядок list_add_tail() в pcl_alloc_write().- Патч: commit
45dbdb2637b7fc5f1355b588780d2a7fb0516805в stable-дерево Linux Kernel
- Upstream commit:
9808eb7656666acc7291bae9ab6b987bd16e47e0
- Файлы патча:
net/sunrpc/xprtrdma/svc_rdma_pcl.c,net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
- Изменение проверки:
if (segcount == 0 || unlikely(segcount > rctxt->rc_maxpages)) return false;
- Изменение порядка: list_add_tail() вызывается после цикла заполнения сегментов
В предоставленных источниках нет списка дистрибутивных пакетов с патчем, поэтому конкретные версии релизов не раскрыты.
Временные меры защиты
При невозможности немедленно применить патч можно использовать следующие временные меры.
- Ограничение доступа к RPC/RDMA: отключить или ограничить доступ к svcrdma для недоверенных peers
- Фильтрация XDR-фрагментов: на уровне сетевого фильтра или прокси отклонять фрагменты Write или Reply с segcount == 0, если это поддерживается реализацией
- Мониторинг нагрузки: отслеживать аномальный рост числа обработанных XDR-фрагментов в svcrdma
- Ограничение rc_maxpages: уменьшить значение rc_maxpages для сокращения пространства некорректных значений segcount, если это допустимо конфигурацией
- Общие меры: при отсутствии специфичного обхода использовать базовые ограничения доступа и мониторинг аномалий в RPC/RDMA-сервисе
Как проверить устранение уязвимости
После применения патча нужно проверить, что проверка segcount == 0 работает.
- Проверка версии ядра: убедиться, что установлен патч или релиз, содержащий его
- Тестирование с segcount == 0: отправить тестовый XDR-фрагмент Write или Reply с segcount == 0 и проверить, что xdr_check_write_chunk() возвращает false
- Проверка списка parsed chunks: убедиться, что chunk с ch_segcount == 0 не попадает в rc_write_pcl или rc_reply_pcl
- Анализ логов: проверить, что при отклонении фрагмента появляются ожидаемые сообщения об ошибке декодирования
- Отсутствие вырожденных объектов: если доступен debug-инструментарий, убедиться, что в списках parsed chunks нет chunk с ch_segcount == 0
Вывод
CVE-2026-93228 — критическая уязвимость в svcrdma Linux Kernel, связанная с отсутствием проверки нулевого segcount в XDR-фрагментах Write и Reply.
Патч добавляет явное отклонение segcount == 0 на границе декодирования и перестраивает порядок добавления chunk в список parsed chunks.
Риск подтверждается патчами ядра и техническим описанием механизма. В предоставленных источниках нет данных о конкретных уязвимых версиях дистрибутивов, PoC или реальной эксплуатации. Для защиты нужно применить патч или убедиться, что svcrdma не принимает XDR-фрагменты с segcount == 0.
Официальные источники
- NVD — CVE-2026-93228
- svcrdma: Reject Write/Reply chunks with segcount 0 - kernel/git/stable/linux.git - Linux kernel stable tree
- svcrdma: Reject Write/Reply chunks with segcount 0 - kernel/git/stable/linux.git - Linux kernel stable tree
- svcrdma: Reject Write/Reply chunks with segcount 0 - kernel/git/stable/linux.git - Linux kernel stable tree
- svcrdma: Reject Write/Reply chunks with segcount 0 - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 25.09.2026 — Опубликована первая версия материала.
