Planetahost VPS
Перейти к основному контенту

Критическая уязвимость в Linux Kernel (CVE-2026-98432)

Информация об уязвимости
Дата публикации 15 октября 2026
CVE CVE-2026-98432
Продукт Ядро Linux
Компонент Сетевой стек TCP/IPv4 (обработка входящих соединений)
Тип уязвимости Use After Free
Уровень опасности Критический
Вектор атаки Через сеть
Требуется аутентификация Нет
Уязвимые версии Все ядра Linux начиная с 4.4 (январь 2016)
Исправлено в 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10, 7.3

Введение

15 октября 2026 года в ядре Linux была исправлена уязвимость, получившая идентификатор CVE-2026-98432. Она находится в сетевом стеке TCP/IPv4 - в коде, который обрабатывает входящие TCP-соединения.

Ошибка была внесена в октябре 2015 года одной из оптимизаций производительности сетевого стека и с тех пор присутствует во всех ядрах Linux начиная с версии 4.4, выпущенной в январе 2016 года. Таким образом, уязвимость оставалась незамеченной более десяти лет.

27 октября 2026 года компания Anthropic сообщила, что её ещё не выпущенная публично модель Claude не только обнаружила эту ошибку, но и построила для неё рабочий эксплойт, позволяющий удалённо выполнить код с правами root без аутентификации. Уязвимость получила оценку CVSS 9.8 из 10 и классифицируется как критическая.

В чём заключается проблема

IPv4-пакеты могут содержать дополнительные опции в заголовке. Две из них - Record Route и Timestamp - просят принимающую сторону вернуть определённую информацию обратно.

Когда на сервер приходит запрос на соединение (SYN-пакет) с такими опциями, ядро сохраняет их копию вместе с полуоткрытым соединением и использует её при формировании ответа (SYN-ACK).

Ошибка представляет собой состояние гонки за владение этой копией. При завершении рукопожатия новое соединение забирает сохранённые опции, не создавая их дубликат. Если клиент в тот же момент повторно передаёт SYN, другой процессор может всё ещё строить SYN-ACK из этих опций, в то время как соединение, которое теперь ими владеет, уничтожается и освобождает память. В результате ответ строится из уже освобождённой области памяти. Такой тип ошибки называется Use After Free (UAF).

В зависимости от того, что успело занять освобождённую память, последствия варьируются от аварийного завершения ядра до отправки атакующему фрагментов памяти ядра в ответном пакете и управляемой записи в память ядра.

Существует и второй вариант уязвимости, связанный с миграцией request-сокетов. Эта функция по умолчанию отключена (параметр net.ipv4.tcp_migrate_req).

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

Уязвимы все ядра Linux, начиная с версии 4.4:

Linux kernel 4.4 и новее (до выхода исправлений)

Исправление включено в следующие стабильные ветки ядра:

5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10, 7.3

Ветки ядра старше 5.10, включая 5.4, исправления в апстриме не получили. Дистрибутивы с длительным сроком поддержки, которые продолжают использовать такие ядра, полностью зависят от бэкпорта исправления со стороны вендора.

Эксплойт, построенный ИИ

27 октября 2026 года компания Anthropic сообщила, что одна из её невыпущенных моделей Claude разработала для CVE-2026-98432 рабочую цепочку эксплуатации:

  • удалённый обход рандомизации адресного пространства ядра (KASLR) занял около 48 минут;
  • ещё примерно 5 минут потребовалось для получения root-доступа;
  • атака не требует учётных данных и каких-либо действий со стороны пользователя;

Целью эксплойта был сервер, принимающий соединения через Multipath TCP (MPTCP).

Важная оговорка: эксплойт был построен в лабораторных условиях и не опубликован. Подтверждённых атак с использованием этой уязвимости на реальные системы на момент публикации не зафиксировано.

Важно

Уязвимость затрагивает практически все серверы, виртуальные машины и узлы Kubernetes на Linux, работающие сегодня. Диапазон затронутых версий начинается с ядра 4.4 (январь 2016 года).

Уязвимость находится в обработке TCP-рукопожатия - до того, как соединение увидит любой сетевой сервис. Поэтому отсутствие уязвимых приложений на сервере не защищает: достаточно того, что сервер доступен по сети.

Обратите внимание на Multipath TCP (MPTCP): программы, собранные с использованием Go 1.24 и новее, в Linux по умолчанию могут создавать прослушивающие сокеты с поддержкой MPTCP. Это означает, что на сервере могут работать MPTCP-сокеты, даже если администратор об этом не подозревает.

Обновление ядра требует перезагрузки сервера. Рекомендуем не откладывать установку исправления.

Проверка версии ядра

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

uname -r

Пример вывода:

6.1.0-40-amd64

Если версия ядра ниже исправленной для вашей ветки (например, ниже 6.1.190 для ветки 6.1), установка обновления безопасности необходима.

Дополнительно проверьте параметры, влияющие на эксплуатацию:

sysctl net.ipv4.tcp_migrate_req net.mptcp.enabled

Ожидаемый результат:

net.ipv4.tcp_migrate_req = 0
net.mptcp.enabled = 0

Значение net.ipv4.tcp_migrate_req = 0 является значением по умолчанию и закрывает второй вариант уязвимости. Отключение MPTCP (net.mptcp.enabled = 0) не устраняет саму ошибку, но убирает конфигурацию, на которую был рассчитан опубликованный лабораторный эксплойт.

Решение

Уязвимость устранена в стабильных выпусках ядра 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 и 7.3.

Debian. Исправленные ядра уже опубликованы: 6.1.190-1 для Debian 12 (bookworm) и 6.12.113-1 для Debian 13 (trixie). Установите обновления и перезагрузите сервер:

sudo apt update
sudo apt full-upgrade
sudo reboot

Используйте именно full-upgrade: новое ядро часто приходит как новый пакет, и обычное обновление может его пропустить.

Ubuntu. На момент публикации статьи исправленные версии ядер уже подготовлены, но пока доступны только в тестовом репозитории -proposed: 5.15.0-203.213 для Ubuntu 22.04, 6.8.0-149.149 для 24.04 и 7.0.0-43.43 для 26.04.

Репозиторий -proposed предназначен для тестирования обновлений перед их выпуском и не рекомендуется для использования в рабочих системах. До появления исправлений в стандартных репозиториях рекомендуется применять временные меры защиты, описанные в следующем разделе.

Ubuntu 20.04 и более ранние версии указаны как уязвимые.

Другие дистрибутивы. Следуйте рекомендациям вашего вендора по CVE-2026-98432 и сравнивайте их с версией ядра, которое реально запущено на сервере.

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

uname -r

Временная защита, если обновление ещё не вышло

Первый вариант уязвимости требует SYN-пакета с IPv4-опциями Record Route или Timestamp. Легитимный TCP-трафик практически никогда не содержит IPv4-опций, поэтому отбрасывание TCP-пакетов с опциями убирает триггер уязвимости, не затрагивая обычные соединения. Это снижает риск, но не заменяет обновление ядра.

С помощью nftables:

sudo nft add table ip ipopts
sudo nft add chain ip ipopts pre '{ type filter hook prerouting priority -300; }'
sudo nft add rule ip ipopts pre ip protocol tcp ip hdrlength != 5 counter drop

Длина заголовка 5 означает отсутствие опций, поэтому всё, что длиннее, отбрасывается. Правило размещается на самом раннем этапе обработки и действует также на трафик, пересылаемый в контейнеры и поды на этом хосте.

Вариант для iptables:

sudo iptables -t raw -I PREROUTING -p tcp -m u32 --u32 "0>>24&0xF=6:15" -j DROP

Посмотреть количество отброшенных пакетов или удалить правило:

sudo nft list chain ip ipopts pre
sudo nft delete table ip ipopts

Правила, добавленные таким образом, не сохраняются после перезагрузки. Чтобы правило применялось при загрузке, сохраните его в файл и загружайте через вашу систему управления конфигурацией. Не добавляйте его в стандартный /etc/nftables.conf, начинающийся с flush ruleset, на хосте с Docker или Kubernetes - перезагрузка такого файла удалит их правила.

Дополнительно:

  • убедитесь, что net.ipv4.tcp_migrate_req равен 0 (значение по умолчанию);
  • если Multipath TCP не нужен, установите net.mptcp.enabled = 0 и перезапустите сервисы; для программ на Go можно запустить их с GODEBUG=multipathtcp=0. Параметр действует только на новые сокеты и задаётся для каждого сетевого пространства имён отдельно, поэтому проверяйте его и внутри контейнеров.

Проверка после обновления

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

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

uname -r

Проверить время работы системы после перезагрузки:

uptime

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

sudo systemctl --failed

Ожидаемый результат:

0 loaded units listed.

Если используется Kubernetes с самостоятельно управляемыми узлами, обновляйте серверы поочерёдно. Перед перезагрузкой каждого узла необходимо перенести запущенные на нём Pod'ы на другие узлы кластера:

kubectl drain <node> --ignore-daemonsets --delete-emptydir-data

# Установить обновление ядра и перезагрузить узел

kubectl uncordon <node>

Перед выполнением обновления убедитесь, что на остальных узлах достаточно ресурсов для размещения перемещаемых Pod'ов.

В управляемых Kubernetes-сервисах (EKS, GKE, AKS) обновление ядра обычно выполняется через обновление системного образа узлов (Node Image). После публикации исправленного образа провайдером необходимо обновить соответствующие пулы узлов (Node Pools).

Дополнительно

Страница уязвимости в Ubuntu Security: CVE-2026-98432 в Ubuntu

Исследование Anthropic: Обнаружение уязвимости моделью Claude

CVE: CVE-2026-98432

NVD: CVE-2026-98432 в NVD