CVE-2026-74688 в Linux Kernel: use-after-free в SCTP, уязвимые версии и защита

CVE: CVE-2026-74688
Продукт: Linux Kernel
Дата публикации: 22.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,50%; процентиль 40,64%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В реализации протокола SCTP в ядре Linux обнаружен сбой типа use-after-free. Ошибка возникает при удалении транспорта, если в очереди контроля остаются пакеты с устаревшими указателями.

При последующей отправке этих пакетов ядро обращается к освобожденной памяти. Это может привести к падению системы или выполнению кода. Ниже описаны механика сбоя, условия эксплуатации и способы проверки исправления.

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


Уязвимость затрагивает сетевой стек ядра Linux и позволяет нарушителю вызвать сбой системы или выполнить код через специально сформированный трафик SCTP.

  • Тип ошибки: Use-after-free. Сбой возникает при обращении к памяти, которая была освобождена ранее.
  • 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,5% (процентиль 40,6%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая, но риск остается высоким из-за критичности.

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


Уязвимость затрагивает реализации протокола SCTP в ядре Linux. Точные номера версий, в которых присутствует ошибка, не указаны в предоставленных источниках, однако патч был применен в ветках stable.

  • Компонент: net/sctp/associola.c.
  • Ветки ядра: Патч был принят в upstream (commit c9158ceaf27780ef64534ad72f44ffde3f8ccc49) и портирован в ветки stable (commits 18d704bdd809377dfd81a3c2f42426763b5da227, 4d6b9cac6df5e0cfef1a66b3edd7aebdb9e4b7e7 и другие).
  • Платформы: Все системы, использующие ядро Linux с включенной поддержкой SCTP.

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


Причина ошибки заключается в некорректном управлении жизненным циклом указателей на транспортные объекты в модуле SCTP.

Функция sctp_make_heartbeat_ack() кэширует указатель на транспорт в структуре chunk->transport, не увеличивая счетчик ссылок. Если включен параметр src_out_of_asoc_ok, пакет HEARTBEAT ACK может остаться в очереди control_chunk_list вместо немедленной отправки.

При удалении транспорта функция sctp_assoc_rm_peer() освобождает объект и планирует его удаление через RCU. Однако она очищает кэшированные указатели только в out_chunk_list, игнорируя control_chunk_list. В результате в очереди контроля остается «висящий» указатель на освобожденную память.

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


Атакующий может инициировать сценарий, при котором в очереди контроля SCTP накапливается пакет HEARTBEAT ACK, содержащий указатель на транспорт.

Затем атакующий вызывает удаление этого транспорта (например, через ASCONF). Ядро освобождает память транспорта, но не обнуляет указатель в застрявшем пакете.

Когда приходит ASCONF_ACK, снимающий блокировку отправки, ядро пытается отправить застрявший пакет. При этом оно обращается по устаревшему указателю, что приводит к use-after-free. Это может вызвать сбой ядра или, при удачном выравнивании памяти, выполнение произвольного кода.

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


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

  • Наличие активной сессии SCTP между атакующим и жертвой.
  • Возможность отправки управляющих сообщений SCTP (ASCONF, HEARTBEAT) для управления состоянием транспорта.
  • Включение параметра src_out_of_asoc_ok в конфигурации ядра или приложения, что позволяет пакетам оставаться в очереди контроля.
  • Точное время удаления транспорта, совпадающее с моментом, когда пакет все еще находится в control_chunk_list.

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


Сценарий атаки начинается с установления SCTP-соединения. Атакующий отправляет HEARTBEAT, на который генерируется ACK, но из-за особенностей конфигурации он остается в очереди контроля.

Далее атакующий отправляет ASCONF для удаления одного из адресов транспорта. Ядро освобождает объект транспорта, но не очищает указатель в застрявшем ACK.

После этого атакующий отправляет ASCONF_ACK. Ядро снимает блокировку и пытается отправить застрявший ACK, обращаясь к освобожденной памяти. Это приводит к сбою или выполнению кода.

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


Публичные данные о подтвержденной эксплуатации в реальных атаках отсутствуют. Однако техническое описание уязвимости и патч доступны в репозитории ядра Linux.

  • PoC: Публичный proof-of-concept код в предоставленных источниках не указан.
  • Эксплуатация: Нет подтверждений массового использования.
  • Патч: Исправление опубликовано в upstream и stable-ветках ядра.

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


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

  • Аномальные сбои ядра (kernel panics) или ошибки памяти (use-after-free) в логах, связанные с модулем SCTP.
  • Необычные паттерны трафика SCTP, включая частые ASCONF и HEARTBEAT сообщения.
  • Запросы к удалению адресов транспорта в SCTP-сессиях, которые не соответствуют легитимной конфигурации.

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


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

  • Мониторинг логов ядра на ошибки памяти, связанные с net/sctp.
  • Анализ сетевого трафика SCTP на предмет аномальных последовательностей ASCONF и HEARTBEAT.
  • Проверка конфигурации ядра на наличие параметра src_out_of_asoc_ok и его влияние на поведение очереди контроля.
  • Использование инструментов для анализа памяти (например, KASAN) в тестовых средах для выявления use-after-free.

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


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

Bash:
uname -r
uname -a
cat /proc/version

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

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


Основной способ устранения уязвимости — обновление ядра Linux до версии, содержащей патч.

  • Upstream: Commit c9158ceaf27780ef64534ad72f44ffde3f8ccc49.
  • Stable: Commits 18d704bdd809377dfd81a3c2f42426763b5da227, 4d6b9cac6df5e0cfef1a66b3edd7aebdb9e4b7e7, 6160e756db81d6cb63e3e2952efcf6c5134be385, 8de65194a04d2552cd39b6c67d942d490f22d174, 936658ec41c28c397ef390140e02d4c91ade92f0, dbb3f418a8665ffb0514e1a9520ab6a1c5d4d886, fad4766a74220fe579c6fcaa10ba01c23529814f.

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

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


Пока обновление не установлено, можно рассмотреть следующие временные меры:

  • Отключение поддержки SCTP в ядре, если это допустимо для рабочих нагрузок.
  • Ограничение доступа к портам SCTP на уровне файрвола, чтобы предотвратить установление сессий с недоверенными источниками.
  • Мониторинг сетевого трафика на предмет аномальной активности SCTP.
  • Использование сетевых экранов для фильтрации подозрительных ASCONF и HEARTBEAT сообщений.

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


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

  • Убедитесь, что версия ядра содержит патч (см. раздел «Version Check»).
  • Проверьте, что в исходном коде net/sctp/associola.c присутствует код, обнуляющий chunk->transport в control_chunk_list при удалении транспорта.
  • Проведите функциональное тестирование SCTP-соединений, чтобы убедиться в отсутствии сбоев.
  • Используйте инструменты для анализа памяти (например, KASAN) в тестовой среде для подтверждения отсутствия use-after-free.

Вывод​


CVE-2026-74688 представляет собой критическую уязвимость в реализации SCTP в ядре Linux, ведущую к use-after-free. Хотя публичные данные о массовой эксплуатации отсутствуют, риск остается высоким из-за возможности удаленного выполнения кода. Рекомендуется срочно обновить ядро до версии, содержащей патч, и применить временные меры защиты до завершения обновления.

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


  1. NVD — CVE-2026-74688
  2. FIRST EPSS — CVE-2026-74688
  3. sctp: clear control chunk transport if it is being removed - kernel/git/stable/linux.git - Linux kernel stable tree
  4. sctp: clear control chunk transport if it is being removed - kernel/git/stable/linux.git - Linux kernel stable tree
  5. sctp: clear control chunk transport if it is being removed - kernel/git/stable/linux.git - Linux kernel stable tree
  6. sctp: clear control chunk transport if it is being removed - kernel/git/stable/linux.git - Linux kernel stable tree
  7. sctp: clear control chunk transport if it is being removed - kernel/git/stable/linux.git - Linux kernel stable tree
  8. sctp: clear control chunk transport if it is being removed - kernel/git/stable/linux.git - Linux kernel stable tree
  9. sctp: clear control chunk transport if it is being removed - kernel/git/stable/linux.git - Linux kernel stable tree
  10. sctp: clear control chunk transport if it is being removed - kernel/git/stable/linux.git - Linux kernel stable tree

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


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