CVE-2026-97523 в Linux Kernel: race condition в mptcp, деление на ноль и последствия для стабильности

CVE: CVE-2026-97523
Продукт: Linux Kernel
Дата публикации: 25.09.2026
Критичность: HIGH
CVSS: 7.5 (3.1)
EPSS: нет данных; процентиль нет данных
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


Уязвимость CVE-2026-97523 связана с гонкой состояний в модуле MPTCP внутри ядра Linux. При определённой последовательности закрытия subflow sockets и передачи данных поле mss_now может быть обнулено, после чего функция tcp_push получает нулевой делитель. Это приводит к некорректной обработке и потенциальному сбою работы сети или ядра на затронутых системах.

Основные характеристики​


Риск заключается в нарушении инварианта при передаче данных через MPTCP: код может обратиться к нулевому значению mss_now как к делителю. Это не информационная утечка и не обход авторизации, а сбой логической обработки внутри сетевого стека.

  • Тип ошибки: race condition между планировщиком MPTCP и изменением состояния subflow sockets
  • CVSS 3.1: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, оценка 7.5, severity HIGH
  • Вектор атаки: удалённый, без необходимости привилегий и взаимодействия пользователя; цель — отказ от службы или нестабильность ядра
  • Эксплуатация в реальных атаках: не подтверждена доступными источниками
  • EPSS: нет данных

Какие продукты и версии затронуты​


Затронут Linux Kernel с включённой подсистемой MPTCP. Конкретные диапазоны версий ядра, которые содержат уязвимый код, в предоставленных источниках не раскрыты.

  • Ядро Linux: версия не подтверждена доступными официальными данными
  • Подсистема: net/mptcp/protocol.c
  • Функция: mptcp_push_release
  • Влияние: системы с активным MPTCP и нагрузкой на передачу данных через subflow sockets

Причина уязвимости​


В функции mptcp_push_release вызывается tcp_push с параметром info->mss_now. Если между выбором subflow socket планировщиком и фактической передачей данных состояние сокета меняется, передача может завершиться ошибкой.

При последующем освобождении сокета значение mss_now в структуре mptcp_sendmsg_info может быть обнулено. Код не проверял этот случай и передавал ноль в tcp_push, где он использовался как делитель. Это создаёт условие для деления на ноль внутри сетевого стека.

Исправление добавляет явную проверку if (info->mss_now) перед вызовом tcp_push. Если поле равно нулю, передача не выполняется, а сокет освобождается напрямую.

Как работает атака​


Атака строится на создании гонки состояний внутри MPTCP. Планировщик выбирает subflow socket для отправки данных. В этот момент другой поток может изменить состояние этого сокета или закрыть его.

Если передача завершается ошибкой, структура mptcp_sendmsg_info остаётся в системе с обнулённым mss_now. Позднее вызов mptcp_push_release передаёт это значение в tcp_push. Внутри tcp_push нулевой делитель приводит к некорректной арифметической операции.

Результат зависит от реализации и состояния ядра: может произойти сбой обработки пакета, зависание сетевого стека или отказ от службы. Удалённый злоумышленник может попытаться вызвать гонку через управляемый трафик к MPTCP-подключению.

Условия успешной эксплуатации​


Для успешной эксплуатации необходимы следующие условия:

  • Включена подсистема MPTCP в ядре Linux
  • Система обрабатывает сетевой трафик через MPTCP с использованием subflow sockets
  • Достигается гонка между планировщиком и изменением состояния сокета
  • Поле mss_now обнуляется до вызова tcp_push
  • Нет внешних ограничений, предотвращающих передачу данных в момент смены состояния

Возможный сценарий атаки​


Злоумышленник направляет сетевой трафик на хост с активным MPTCP. Трафик вызывает создание или закрытие subflow sockets в определённой последовательности.

Планировщик MPTCP выбирает socket для отправки данных, но до завершения передачи socket закрывается или меняет состояние. Передача завершается ошибкой, mss_now становится нулём.

При освобождении сокета вызывается mptcp_push_release. Функция передаёт info->mss_now в tcp_push без проверки. Нулевой делитель вызывает некорректную обработку внутри стека и может привести к сбою ядра или отказу от службы.

Есть ли публичный эксплойт​


Доступные источники содержат только описание уязвимости, патч и ссылки на коммиты исправления в стабильном дереве Linux kernel.

  • PoC: не подтверждён доступными источниками
  • Техническое описание: доступно через описание CVE и diff патча
  • Подтверждённая эксплуатация: не подтверждена доступными источниками
  • Готовый рабочий payload: не раскрыт в предоставленных данных

Признаки эксплуатации​


Специфичных индикаторов компрометации для этой уязвимости в предоставленных источниках нет. Ниже приведены общие точки контроля, которые можно использовать при подозрении на сбой MPTCP или аномальную нагрузку.

  • Внезапное увеличение количества сетевых ошибок в подсистеме MPTCP
  • Рост числа обрывов соединений через subflow sockets
  • Аномальные значения mss_now в отладочных логах ядра, если доступны
  • Повторяющиеся сбои сетевого стека после закрытия MPTCP-соединений
  • Повышенная нагрузка на CPU в контексте обработки сетевых пакетов

Как обнаружить атаку​


Для обнаружения аномалий можно использовать мониторинг состояния MPTCP и сетевых ошибок.

  • Проверка активных MPTCP-соединений через утилиты ядра, если они доступны на системе
  • Анализ логов ядра на ошибки в подсистеме net/mptcp
  • Мониторинг количества закрытых subflow sockets за единицу времени
  • Сравнение текущей версии ядра с известными исправлениями MPTCP
  • Проверка журналов сетевого стека на аномальные значения параметров передачи

Как проверить свою версию​


Для проверки версии ядра Linux используйте следующие команды:

Bash:
uname -r

Bash:
uname -a

Bash:
cat /proc/version

Эти команды показывают текущую версию ядра. Для точного определения наличия исправления CVE-2026-97523 необходимо сопоставить версию с официальными релизами дистрибутива или стабильным деревом Linux kernel.

Если используется пакетное управление, можно проверить наличие патча в списке установленных обновлений:

Bash:
dpkg -l | grep linux-kernel

или

Bash:
rpm -qa | grep kernel

Конкретные имена пакетов зависят от дистрибутива.

Исправление​


Исправление CVE-2026-97523 реализовано в коммитах Linux kernel stable tree.


Рекомендуется обновить ядро до версии, содержащей эти исправления. Для дистрибутивов Linux необходимо установить пакет ядра с патчем от поставщика.

Если обновление не возможно немедленно, можно временно отключить MPTCP или ограничить его использование на критических системах.

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


Пока обновление ядра не применено, можно снизить вероятность срыва гонки состояний:

  • Отключить подсистему MPTCP через модуль ядра, если он загружен динамически
  • Ограничить использование MPTCP на критических сетевых интерфейсах
  • Уменьшить нагрузку на MPTCP-соединения во время обновления
  • Мониторинг сетевых ошибок и готовность к перезапуску сетевого стека
  • Изоляция систем с активным MPTCP от внешнего трафика, если это допустимо бизнес-процессами

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


После обновления ядра необходимо убедиться, что патч применён.

Bash:
grep -r "mptcp: close race between scheduler" /proc/version

или проверить версию ядра:

Bash:
uname -r

Для проверки наличия исправления в исходном коде ядра можно выполнить:

Bash:
grep -A 5 "if (info->mss_now)" /lib/modules/$(uname -r)/build/net/mptcp/protocol.c

Если строка if (info->mss_now) присутствует перед вызовом tcp_push, патч применён.

Также рекомендуется проверить логи ядра на отсутствие новых ошибок в подсистеме MPTCP после обновления.

Вывод​


CVE-2026-97523 — это race condition в MPTCP, который приводит к делению на ноль при передаче данных через subflow sockets. Уязвимость затрагивает системы с активным MPTCP и может вызвать отказ от службы или нестабильность ядра.

Исправление добавляет проверку нулевого значения mss_now перед вызовом tcp_push. Администратору необходимо обновить ядро до версии, содержащей патч, или временно ограничить использование MPTCP на критических системах.

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


  1. NVD — CVE-2026-97523
  2. mptcp: close race between scheduler and state change - kernel/git/stable/linux.git - Linux kernel stable tree
  3. mptcp: close race between scheduler and state change - kernel/git/stable/linux.git - Linux kernel stable tree
  4. mptcp: close race between scheduler and state change - kernel/git/stable/linux.git - Linux kernel stable tree
  5. mptcp: close race between scheduler and state change - kernel/git/stable/linux.git - Linux kernel stable tree
  6. CVEs — The Linux Kernel documentation

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


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