27 октября команда Frontier Red Team из Anthropic рассказала, как их внутренняя модель нашла в сетевом стеке ядра Linux ошибку CVE-2026-98432 и написала к ней рабочий эксплойт. Атакующему хватает сетевого доступа к серверу, где слушает сокет Multipath TCP (MPTCP): ни логина, ни действий со стороны админа не нужно, итог это команда от root.
Касается это не только тех, кто сам включал MPTCP. С Go 1.24 сервисы на Go открывают MPTCP-сокеты по умолчанию, так что любой бинарник на свежем Go, который слушает порт на Linux, попадает под удар. Патч уже в основной ветке ядра и в стабильных ветках, Debian выпустил исправленные пакеты.
Как устроена атака на CVE-2026-98432
В основе гонка, которая заканчивается обращением к уже освобождённой памяти (use-after-free). Когда на одну и ту же полуоткрытую TCP-сессию приходит повторный SYN, ядро может собирать ответный SYNACK с IP-опциями, которые другой процессор в этот момент уже освободил вместе с дочерним сокетом. Исправление простое: эти опции теперь освобождаются через RCU (kfree_rcu), как в остальных местах кода.
По словам Anthropic, эксплойт идёт в два шага. Сначала атакующий через ту же гонку заставляет ядро прочитать лишние байты и прислать их в ответе, пока среди них не попадётся указатель ядра: так снимается KASLR. Потом той же ошибкой переполняется буфер и подменяется указатель на функцию, а код, заранее подложенный в память ядра обычными средствами протокола, запускает команду от root.
Неудачная попытка не роняет систему, а просто срывает рукопожатие, поэтому пробовать можно сколько угодно. В демонстрации Anthropic на утечку указателя ушло 48 минут, ещё пять минут на запуск команды. Для сервера, который молча принимает тысячи соединений, это не срок.
Go 1.24 включает MPTCP сам
В заметках к выпуску Go 1.24 сказано, что net.ListenConfig теперь по умолчанию использует MPTCP там, где он поддерживается, то есть пока только на Linux. Обычный http.ListenAndServe идёт через тот же путь. Значит, панели, агенты мониторинга, экспортеры и любые свои сервисы на Go 1.24 и новее слушают порт уже через MPTCP, если ядро его умеет.
Посмотреть, какие сокеты на сервере открыты как MPTCP, и включён ли MPTCP в ядре:
ss -Mltnp sysctl net.mptcp.enabled uname -r
Исправленные ядра в Debian
В трекере безопасности Debian ошибка закрыта в таких версиях пакета linux:
- Debian 12 bookworm: 6.1.190-1 (DLA-4841-1), для ветки linux-6.12 версия 6.12.113-1~deb12u1 (DLA-4850-1);
- Debian 13 trixie: 6.12.113-1 (DSA-6568-1);
- forky и sid: начиная с 7.2.10-1.
Обновление стандартное, после него обязательно перезагрузка, иначе работает старое ядро:
apt update && apt full-upgrade reboot
Если перезагрузиться прямо сейчас нельзя, MPTCP можно временно выключить на уровне ядра. Новые сокеты тогда открываются как обычный TCP, сервисы на Go это переживают без проблем. Для отдельного сервиса на Go есть и свой выключатель, переменная GODEBUG=multipathtcp=0.
sysctl -w net.mptcp.enabled=0 echo 'net.mptcp.enabled = 0' > /etc/sysctl.d/90-no-mptcp.conf
Итого: дыра в ядре даёт root по сети без пароля на любом сервере с MPTCP-сокетом, а Go 1.24 и новее открывает такие сокеты сам. Поставьте исправленное ядро и перезагрузитесь, а до перезагрузки выключите net.mptcp.enabled.