CVE: CVE-2026-90110
Продукт: Linux Kernel
Дата публикации: 17.09.2026
Критичность: CRITICAL
CVSS: 9.4 (3.1)
EPSS: 0,60%; процентиль 46,84%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
Уязвимость CVE-2026-90110 затрагивает подсистему inetpeer в ядре Linux. Она позволяет нарушителю за границей системы предсказывать структуру Red-Black дерева peer-записей, целенаправленно удалять нужные узлы через garbage collection и сбрасывать rate-limiting token bucket при повторном создании записи. Это даёт возможность обходить IP-ключевые ICMP rate limits и выводить открытые UDP порты по аналогии с SAD DNS style attacks.
Основные характеристики
Риск заключается в том, что нарушитель вне системы может использовать предсказуемую структуру дерева inetpeer для сбоя механизмов ограничения трафика и получения информации о состоянии UDP-портов.
- Тип ошибки: детерминированная обходимость rate limit через предсказуемый порядок узлов Red-Black дерева и сброс token bucket при повторном создании узла.
- CVSS 3.1:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L, оценка 9.4, severity CRITICAL.
- Вектор атаки: удалённый нарушитель без привилегий и взаимодействия с пользователем.
- Факт эксплуатации: в предоставленных источниках нет отдельного подтверждения массовой или подтверждённой эксплуатации; описан механизм и исправление.
- EPSS: 0,595%, процентиль 46,837%.
Какие продукты и версии затронуты
Затронут Linux Kernel с подсистемой inetpeer rate limiting. В предоставленных источниках нет перечня конкретных версий ядра или дистрибутивов.
- Компонент:
inetpeerв ядре Linux.
- Файлы изменения:
include/net/inetpeer.hиnet/ipv4/inetpeer.c.
- Исправляющие коммиты:
Причина уязвимости
Подсистема inetpeer хранит peer-записи в Red-Black tree, где ключом детерминированно служит удалённый IP-адрес. Поиск по дереву использует стандартное лексикографическое сравнение через
inetpeer_addr_cmp. Из-за этого нарушитель за границей системы может предсказать топологию дерева и последовательность узлов, которые проверяются при lookup.При превышении размера дерева порогом
inet_peer_threshold запускается garbage collection. Нарушитель может целенаправленно вызывать eviction целевых inet_peer узлов. После удаления узла и получения нового пакета система создаёт новую запись, а rate-limiting token bucket с полями rate_tokens и rate_last сбрасывается до полной ёмкости.Это превращает механизм ограничения в предсказуемый канал: нарушитель получает контроль над тем, какие peer-записи удаляются и когда сбрасывается лимит.
Как работает атака
Нарушитель работает извне системы и не имеет доступа к ядру. Он отправляет ICMP-пакеты с определёнными UDP-портными параметрами или другими сетевыми признаками, которые попадают в inetpeer.
Пока дерево хранит peer-записи в детерминированном порядке по IP-адресам, нарушитель может вычислить путь lookup и список кандидатов
gc_stack. Это позволяет выбрать целевой узел для удаления. После eviction система при следующем пакете создаёт новую запись и сбрасывает token bucket.Сброс лимита даёт нарушителю два эффекта:
- обход IP-ключевых ICMP rate limits, так как лимит не накапливается по целевому peer;
- вывод открытых UDP портов, потому что поведение системы при наличии ответа или отсутствии ответа становится различимым через влияние на inetpeer state.
Исправление заменяет порядок узлов в Red-Black tree на SipHash от IP-адреса с секретным ключом
inetpeer_hash_key, инициализируемым через net_get_random_once(). Теперь нарушитель не может предсказать layout дерева без знания ключа.Условия успешной эксплуатации
Для использования механизма нужны следующие условия:
- удалённый доступ к сетевому интерфейсу Linux с активным inetpeer rate limiting;
- возможность отправлять ICMP-пакеты, которые обрабатываются подсистемой inetpeer;
- наличие UDP-трафика или UDP-портных параметров в пакетах, влияющих на peer-записи.
В предоставленных источниках нет указания на необходимость привилегий, локального доступа или взаимодействия с пользователем.
Возможный сценарий атаки
Нарушитель из внешней сети направляет ICMP-пакеты в целевой Linux-хост. Ядро обрабатывает пакеты через inetpeer и создаёт или находит peer-записи в Red-Black tree.
Поскольку порядок узлов детерминирован по IP-адресам, нарушитель может предсказать, какие записи попадут в
gc_stack при garbage collection. Он целенаправленно вызывает eviction нужной записи. При следующем пакете система создаёт новую запись и сбрасывает token bucket.Нарушитель повторяет цикл для разных UDP-портных значений или адресов. Различия в реакции системы — наличие ответа, задержка, срабатывание rate limit — позволяют ему выводить открытые UDP порты и обходить ICMP rate limits.
После применения исправления порядок узлов определяется SipHash от адреса с секретным ключом. Нарушитель не может предсказать layout дерева без знания
inetpeer_hash_key, поэтому детерминированный eviction gadget перестаёт работать.Есть ли публичный эксплойт
В предоставленных источниках нет отдельного публичного PoC, эксплойта или подтверждённой эксплуатации.
Описан механизм: нарушитель может предсказывать дерево inetpeer, вызывать eviction и сбрасывать rate-limiting token bucket. Это позволяет обходить ICMP rate limits и выводить открытые UDP порты.
Отсутствие сведений в источниках не означает отсутствие эксплойта; оно означает, что в переданном пакете доказательств нет отдельного подтверждения публичного кода или реального инцидента.
Признаки эксплуатации
Специфичных IOC для CVE-2026-90110 в предоставленных источниках нет.
Ниже приведены неспецифичные точки контроля, которые можно использовать как общие признаки аномалии:
- аномальный рост числа ICMP-запросов к хосту с Linux;
- резкие изменения в распределении UDP-портных значений во входящем трафике;
- неожиданное увеличение количества peer-записей в inetpeer или частые garbage collection события;
- аномальные задержки или отказы ICMP-ответов, не объяснимые сетевыми причинами;
- рост числа созданных и удалённых inet_peer узлов в коротком временном окне.
Эти признаки не подтверждают эксплуатацию CVE-2026-90110 напрямую; они подходят для общей аномалии сетевого трафика.
Как обнаружить атаку
Для обнаружения можно использовать сетевые и системные данные:
- мониторинг ICMP-трафика на хосте с Linux, особенно по портам UDP;
- отслеживание изменений в состоянии inetpeer через доступные диагностические интерфейсы или логи ядра, если они включены;
- анализ частоты создания и удаления peer-записей;
- сравнение ожидаемого объёма ICMP-трафика с фактическим.
В предоставленных источниках нет конкретных команд для мониторинга inetpeer. Команды проверки версии ядра можно использовать как базовый шаг:
Bash:
uname -r
uname -a
cat /proc/version
Как проверить свою версию
Проверка версии ядра Linux:
Bash:
uname -r
uname -a
cat /proc/version
Эти команды показывают версию ядра и параметры сборки. В предоставленных источниках нет точного списка версий, затронутых уязвимостью.
Для проверки наличия исправления нужно сравнивать текущий коммит или ветку с исправляющими коммитами:
- 199fcf285e498111e029137d088949bc6c26d578
- 2ee66e9487172fcd189bc52a767c30dad7141c09
- 5f127e3cc9647a8a70db12c65dbd0de473545380
- 7109bb63667a53e4542ad845476f97d0c8b28a61
- 857681f6835d5b0a7bc4a34a026baeaaf5215623
- b20e98f0bb668a59abaf7bcf85d75c073e90d352
Если используется дистрибутив, нужно проверять его пакетные обновления и changelog на наличие исправления inetpeer.
Исправление
Основное исправление — применение патча ядра Linux с заголовком
inetpeer: randomize RB-tree node comparison using SipHash.Патч вносит следующие изменения:
- добавляет поле
u64 hashвstruct inet_peer;
- использует SipHash для сравнения узлов Red-Black tree;
- инициализирует секретный ключ
inetpeer_hash_keyчерезnet_get_random_once();
- кэширует 64-битный SipHash в записи peer;
- вычисляет целевой хеш
dhashодин раз в началеinet_getpeer(), чтобы не пересчитывать SipHash на каждом шаге обхода дерева.
Исправляющие коммиты:
- 199fcf285e498111e029137d088949bc6c26d578
- 2ee66e9487172fcd189bc52a767c30dad7141c09
- 5f127e3cc9647a8a70db12c65dbd0de473545380
- 7109bb63667a53e4542ad845476f97d0c8b28a61
- 857681f6835d5b0a7bc4a34a026baeaaf5215623
- b20e98f0bb668a59abaf7bcf85d75c073e90d352
Для дистрибутивов нужно устанавливать пакет ядра с исправлением.
Временные меры защиты
В предоставленных источниках нет отдельных временных мер защиты.
Ниже приведены общие меры, которые могут снизить практическую полезность механизма до применения патча:
- ограничение ICMP-трафика на сетевом уровне;
- фильтрация UDP-портных значений во входящем трафике;
- снижение объёма ICMP-запросов к хосту с Linux;
- изоляция критичных сервисов от внешнего ICMP-трафика.
Эти меры не устраняют уязвимость, но могут затруднить использование механизма rate limit bypass и вывода UDP-портов.
Как проверить устранение уязвимости
После применения патча нужно проверить:
- версию ядра через
uname -rилиcat /proc/version;
- наличие исправляющего коммита в истории ядра, если используется исходный код или git-репозиторий дистрибутива;
- поведение inetpeer: порядок узлов должен определяться SipHash с секретным ключом.
В предоставленных источниках нет отдельной команды для проверки наличия
inetpeer_hash_key в рантайме ядра. Можно проверить исходный код или бинарник на наличие изменений в net/ipv4/inetpeer.c и include/net/inetpeer.h:
Bash:
grep -R "inetpeer_hash_key" /path/to/kernel/source/net/ipv4/inetpeer.c
Замените
/path/to/kernel/source на фактический путь к исходникам ядра. Если используется дистрибутивный пакет, проверьте changelog пакета ядра.Вывод
CVE-2026-90110 — уязвимость в подсистеме inetpeer Linux Kernel, позволяющая нарушителю за границей системы предсказывать структуру Red-Black дерева peer-записей и целенаправленно сбрасывать rate-limiting token bucket. Это даёт возможность обходить ICMP rate limits и выводить открытые UDP порты.
Исправление заменяет детерминированное сравнение IP-адресов на SipHash с секретным ключом, что делает layout дерева непредсказуемым для внешнего нарушителя. Практическая защита — обновление ядра до версии с патчем
inetpeer: randomize RB-tree node comparison using SipHash.Официальные источники
- NVD — CVE-2026-90110
- FIRST EPSS — CVE-2026-90110
- inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
- inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
- inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
- inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
- inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
- inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 22.09.2026 — Опубликована первая версия материала.
