CVE-2026-90110 в Linux Kernel: детерминированная обходимость rate limit и вывод открытых UDP портов через inetpeer

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 хранит 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

Эти команды показывают версию ядра и параметры сборки. В предоставленных источниках нет точного списка версий, затронутых уязвимостью.

Для проверки наличия исправления нужно сравнивать текущий коммит или ветку с исправляющими коммитами:


Если используется дистрибутив, нужно проверять его пакетные обновления и 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 на каждом шаге обхода дерева.

Исправляющие коммиты:


Для дистрибутивов нужно устанавливать пакет ядра с исправлением.

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


В предоставленных источниках нет отдельных временных мер защиты.

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

  • ограничение ICMP-трафика на сетевом уровне;
  • фильтрация UDP-портных значений во входящем трафике;
  • снижение объёма ICMP-запросов к хосту с Linux;
  • изоляция критичных сервисов от внешнего ICMP-трафика.

Эти меры не устраняют уязвимость, но могут затруднить использование механизма rate limit bypass и вывода UDP-портов.

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


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

  1. версию ядра через uname -r или cat /proc/version;
  2. наличие исправляющего коммита в истории ядра, если используется исходный код или git-репозиторий дистрибутива;
  3. поведение 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.

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


  1. NVD — CVE-2026-90110
  2. FIRST EPSS — CVE-2026-90110
  3. inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
  4. inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
  5. inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
  6. inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
  7. inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
  8. inetpeer: randomize RB-tree node comparison using SipHash - kernel/git/stable/linux.git - Linux kernel stable tree
  9. CVEs — The Linux Kernel documentation

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


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