CVE: CVE-2026-90235
Продукт: Linux Kernel
Дата публикации: 17.09.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,63%; процентиль 48,61%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В подсистеме SUNRPC ядра Linux обнаружено нарушение контракта видимости при замене и восстановлении указателей на колбэки сокета. Из-за отсутствия атомарных операций процессор может использовать устаревшие адреса функций, что приводит к некорректному выполнению кода в ядре. Разбираем механику гонки, затронутые функции и порядок применения исправлений.
Основные характеристики
Уязвимость представляет собой гонку состояний (race condition) в ядре Linux, возникающую при работе с общими указателями на колбэки сокета в подсистеме SUNRPC. Отсутствие атомарных операций чтения и записи позволяет процессору использовать устаревшие адреса функций, что нарушает целостность выполнения кода в ядре.
- Тип ошибки: Нарушение контракта видимости (visibility contract) при работе с указателями на функции. Официальный классификатор CWE для данного CVE не присвоен.
- 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. Это означает, что атака возможна удаленно, не требует прав администратора и приводит к полной потере конфиденциальности, целостности и доступности.
- EPSS: 0,63% (процентиль 48,61%). Метрика отражает вероятность эксплуатации в ближайшие 30 дней. Значение ниже среднего, что указывает на отсутствие подтвержденных массовых атак на текущий момент.
- Статус: Исправление внесено в стабильные ветки ядра. Уязвимость не включена в каталог CISA KEV.
Какие продукты и версии затронуты
Уязвимость затрагивает подсистему SUNRPC (Sun Remote Procedure Call) в Linux Kernel, а именно модуль
net/sunrpc/xprtsock.c. Проблема существует в версиях ядра, где функции завершения подключения и восстановления колбэков используют обычные операции присваивания для замены указателей sk->sk_data_ready и sk->sk_write_space.Исправление распространяется на следующие стабильные ветки ядра Linux:
- Ветка 6.12.x (коммит
589f761236e05ff9de1bdfd6a5258f113e6457fe)
- Ветка 6.6.x (коммит
d8f0b83753809761a560c4b33249388548ba6e43)
- Ветка 6.1.x (коммит
da652cb17f9faeea1fa44b7215e8869a0b10b664)
- Ветка 5.15.x (коммит
ed80d009b154aa204f541d390884851b3d4f15ae)
Конкретные номера сборок, в которых присутствует исправление, зависят от политики вашего дистрибутива. Рекомендуется свериться с официальными базами данных поставщика ОС.
Причина уязвимости
Причина уязвимости кроется в нарушении правил многопоточной видимости данных (memory visibility) при работе с общими указателями на функции в структуре
struct sock. Подсистема xprtsock перехватывает сокеты (AF_LOCAL, UDP, TCP) для обработки RPC-запросов, заменяя стандартные обработчики sk_data_ready и sk_write_space на собственные.При завершении работы транспорта (teardown) функция
xs_restore_old_callbacks() восстанавливает исходные указатели. Однако запись этих значений выполнялась обычным присваиванием (plain store). В многопроцессорных системах другой CPU может кэшировать указатель до момента его обновления.В результате, когда ядро пытается вызвать обработчик, оно может использовать устаревший адрес (stale snapshot), который уже не соответствует текущему состоянию сокета. Аналогичная проблема существует в
xs_udp_do_set_buffer_size(), где вызов sk->sk_write_space выполняется через обычное чтение (plain load) без гарантии, что процессор видит актуальное значение указателя.Это создает окно, в котором вызывается функция, которая уже была отключена или заменена.
Как работает атака
Атака эксплуатирует гонку состояний (race condition) между процессами, работающими на разных ядрах CPU. Сценарий предполагает, что атакующий инициирует создание и последующее закрытие RPC-соединения, чтобы спровоцировать смену указателей на колбэки сокета.
В момент, когда один процессор выполняет восстановление исходных обработчиков в
xs_restore_old_callbacks(), другой процессор может находиться в состоянии, где он уже прочитал указатель sk->sk_write_space или sk->sk_data_ready, но еще не выполнил вызов. Из-за отсутствия барьеров памяти и атомарных операций (READ_ONCE/WRITE_ONCE) процессор может использовать кэшированное значение указателя.Если в этот момент указатель был уже заменен на стандартный обработчик нижележащего протокола, вызов может быть направлен в функцию, которая не ожидает контекста SUNRPC, или в функцию, которая была освобождена. Это приводит к некорректному выполнению кода в ядре, потенциальному повреждению памяти или обходу механизмов контроля доступа.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости атакующему необходимо выполнить следующие условия:
- Наличие в системе подсистемы SUNRPC, настроенной для использования транспортных механизмов AF_LOCAL, UDP или TCP.
- Возможность инициировать создание и закрытие RPC-соединений, чтобы спровоцировать смену указателей на колбэки сокета.
- Умение управлять задержками выполнения (timing) для попадания в узкое временное окно гонки, когда один CPU читает указатель, а другой его обновляет.
- Отсутствие исправлений, добавляющих макросы
READ_ONCEиWRITE_ONCEв соответствующие функции ядра.
Возможный сценарий атаки
Атакующий устанавливает соединение с RPC-сервером, используя транспорт xprtsock. В процессе работы соединение завершается (например, по таймауту или по команде клиента). Функция
xs_restore_old_callbacks() начинает восстанавливать исходные указатели на обработчики сокета.В этот же момент другой поток в ядре, обрабатывающий входящий трафик или изменение состояния сокета, пытается вызвать
sk->sk_write_space. Из-за отсутствия атомарного чтения процессор использует устаревший указатель на xs_udp_write_space. Вызов функции, которая уже не должна обрабатывать данный сокет, приводит к непредсказуемому поведению: повреждению структур данных сокета, падению ядра (kernel panic) или выполнению кода с привилегиями ядра.Есть ли публичный эксплойт
На момент публикации данных в NVD и в стабильных ветках ядра публичный эксплойт (PoC) для CVE-2026-90235 не зафиксирован. В каталоге CISA KEV уязвимость отсутствует, что подтверждает отсутствие подтвержденных фактов эксплуатации в реальных атаках.
Тем не менее, наличие технического описания и исправления в открытых репозиториях ядра позволяет исследователям безопасности разработать PoC. Отсутствие публичного эксплойта не означает, что атака невозможна; это лишь указывает на то, что массовое использование уязвимости на текущий момент не наблюдается.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для CVE-2026-90235 в официальных источниках не опубликованы. Поскольку уязвимость связана с гонкой состояний, прямые следы атаки в логах могут отсутствовать или быть неспецифичными.
Рекомендуется обращать внимание на следующие неспецифичные признаки, которые могут указывать на аномальную активность в подсистеме сети:
- Внезапные падения ядра (kernel panic) или ошибки segfault в модуле
sunrpc.
- Аномальные задержки в работе RPC-клиентов или серверов.
- Необъяснимые изменения в состоянии сокетов, зафиксированные в журналах аудита (auditd), если они настроены на отслеживание сетевых операций.
Как обнаружить атаку
Обнаружение атаки на эту уязвимость затруднено из-за природы гонки состояний. Специфичных сигнатур для IDS/IPS не существует.
Для мониторинга рекомендуется использовать следующие методы:
- Анализ журналов ядра (
dmesg,journalctl) на наличие сообщений об ошибках в подсистемеsunrpcилиxprtsock.
- Мониторинг стабильности системы: частые перезагрузки или зависания RPC-сервисов могут быть косвенным признаком эксплуатации.
- Использование инструментов трассировки (eBPF, SystemTap) для отслеживания вызовов функций
xs_data_readyиxs_udp_write_spaceв подозрительных контекстах, хотя это требует глубокой экспертизы.
Как проверить свою версию
Для проверки текущей версии ядра и определения необходимости обновления используйте следующие команды:
Bash:
uname -r
uname -a
cat /proc/version
Полученная версия ядра должна быть сверена с официальными списками исправлений вашего дистрибутива. Если версия входит в диапазон, затронутый уязвимостью, и исправление еще не установлено, система считается уязвимой.
Исправление
Единственным надежным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление. Коммит
33930840b5f0a79f826e7c69dc6cd78f72a67481 и его порты в стабильные ветки добавляют макросы READ_ONCE и WRITE_ONCE для всех затронутых операций.- Обновите ядро до последней доступной стабильной версии, поддерживаемой вашим дистрибутивом.
- Перезагрузите систему после установки обновленного ядра, чтобы изменения вступили в силу.
- Проверьте, что модуль
sunrpcзагружен из новой версии ядра.
Временные меры защиты
Поскольку уязвимость находится в ядре, временные меры ограничены. Если обновление невозможно в краткосрочной перспективе, рассмотрите следующие шаги:
- Ограничьте доступ к RPC-сервисам, если они не критичны для работы системы.
- Используйте сетевые экраны для фильтрации трафика, направленного на RPC-порты, чтобы снизить вероятность срабатывания гонки.
- Отключите использование транспортных механизмов UDP или TCP для SUNRPC, если это позволяет конфигурация, переключившись на AF_LOCAL (если это применимо и безопасно для вашей архитектуры).
Как проверить устранение уязвимости
После обновления ядра убедитесь, что исправление применено:
- Проверьте версию ядра:
uname -r.
- Убедитесь, что версия соответствует той, в которой заявлено исправление.
- Проверьте наличие коммита в истории ядра (если доступно через
gitили инструменты дистрибутива):git log --oneline | grep 33930840b5f0.
- Проведите функциональное тестирование RPC-сервисов, чтобы убедиться, что они работают корректно после обновления.
Вывод
CVE-2026-90235 представляет собой критический риск для систем, использующих подсистему SUNRPC в Linux Kernel. Уязвимость связана с нарушением контракта видимости при работе с указателями на колбэки сокета, что может привести к компрометации системы. Несмотря на отсутствие подтвержденных фактов эксплуатации, высокая оценка CVSS (9.8) требует немедленных действий.
Администраторам рекомендуется как можно скорее обновить ядро до исправленной версии. Откладывание обновления увеличивает риск успешной атаки, особенно в средах, где RPC-сервисы доступны из внешних сетей. Регулярный мониторинг безопасности и своевременное применение патчей остаются ключевыми факторами защиты.
Официальные источники
- NVD — CVE-2026-90235
- FIRST EPSS — CVE-2026-90235
- sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE - kernel/git/stable/linux.git - Linux kernel stable tree
- sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE - kernel/git/stable/linux.git - Linux kernel stable tree
- sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE - kernel/git/stable/linux.git - Linux kernel stable tree
- sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE - kernel/git/stable/linux.git - Linux kernel stable tree
- sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 20.09.2026 — Опубликована первая версия материала.
