Уязвимость ядра Linux CVE-2026-98432: временная блокировка и установка патча ядра
CVE-2026-98432 — уязвимость ядра Linux, при которой код ядра, принимающий TCP-соединения по IPv4, повторно читает уже освобождённую память; команда CVE ядра Linux оценила её как Critical. Поскольку уязвимость можно атаковать удалённо без аутентификации, мы обновили сервер Lightsail на AlmaLinux 9.8 с Nginx и Apache до пакетов исправленного ядра, перезагрузили его и проверили патч по версии работающего ядра.
1️⃣ Уязвимость ядра Linux CVE-2026-98432: как устроена ошибка и что она затрагивает
Когда приходит запрос на TCP-соединение (SYN) с параметрами IPv4, ядро хранит копию этих параметров вместе с ожидающим соединением, чтобы вернуть их в ответе (SYN-ACK). Когда соединение установлено, эта копия без дублирования передаётся прямо в сокет нового соединения.
Если клиент тем временем снова отправит SYN, другой процессор может как раз собирать SYN-ACK с теми же параметрами. Если в этот момент новое соединение закроется, а ядро сразу освободит память параметров, код, собиравший SYN-ACK, прочитает уже освобождённую память — это use-after-free.
Этот код выполняется на этапе, когда ядро обрабатывает запрос на соединение, ещё до того как приложение увидит соединение. Поэтому, какая бы служба ни открыла порт, если он слушает по TCP IPv4, атака может достичь его удалённо без учётных данных, а оценка по CVSS 3.1 составляет 9.8.
Ошибка существует с Linux 4.4, поэтому затронуто большинство серверов на Linux. Среди блюпринтов Lightsail руководство AWS называет AlmaLinux 9, CentOS Stream 9, Debian, openSUSE Leap, Ubuntu, Amazon Linux 2 и Amazon Linux 2023. В объявлении AlmaLinux затронутыми названы версии 8, 9 и 10, а блюпринты приложений Lightsail, такие как WordPress и LAMP, тоже работают на Debian или Ubuntu и поэтому также затронуты.
FreeBSD и Windows Server, которые не используют ядро Linux, не затронуты.
Серверам с выключенным MPTCP (Multipath TCP) патч тоже нужен. Опубликованная атака была нацелена на серверы с открытым слушателем MPTCP, но сама ошибка находится в обычном коде TCP для IPv4, поэтому в объявлении AlmaLinux сказано, что системы без MPTCP тоже нужно исправить.
Исправленное ядро освобождает память параметров только после окончания периода ожидания RCU (grace period), поэтому память сохраняется, пока другой процессор читает параметры, собирая SYN-ACK.
2️⃣ Проверка версии ядра Linux: исправлено ли ядро
Нужен ли патч, зависит от версии работающего ядра, поэтому перед обновлением мы сначала проверили дистрибутив и версию ядра.
cat /etc/os-releaseNAME="AlmaLinux"
VERSION="9.8 (Olive Jaguar)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.8"
PLATFORM_ID="platform:el9"
PRETTY_NAME="AlmaLinux 9.8 (Olive Jaguar)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:9::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"
ALMALINUX_MANTISBT_PROJECT="AlmaLinux-9"
ALMALINUX_MANTISBT_PROJECT_VERSION="9.8"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.8"
SUPPORT_END=2032-06-01uname -r5.14.0-687.55.1.el9_8.x86_64nft --version-bash: nft: command not foundДистрибутив — AlmaLinux 9.8, работающее ядро — 5.14.0-687.55.1.el9_8. Команды nft, которую использует временное правило блокировки, тоже не было, значит пакет nftables не был установлен.
rpm -q kernelkernel-5.14.0-611.30.1.el9_7.x86_64
kernel-5.14.0-687.49.1.el9_8.x86_64
kernel-5.14.0-687.55.1.el9_8.x86_64[rpm -q kernel] выводит список установленных ядер, но до перезагрузки реально работает только одно — то, которое показывает [uname -r]. Сравните эту версию с исправленной версией из объявления AlmaLinux.
| Дистрибутив | Версия исправленного ядра (эта версия или новее) |
|---|---|
| AlmaLinux 8 | kernel-4.18.0-553.182.1.el8_10 |
| AlmaLinux 9 | kernel-5.14.0-687.64.1.el9_8 |
| AlmaLinux 10 | kernel-6.12.0-211.72.1.el10_2 |
5.14.0-687.55.1.el9_8 ниже исправленной версии для AlmaLinux 9 — 5.14.0-687.64.1.el9_8, поэтому требовалось обновление.
Чтобы понять, открыт ли путь для атаки, мы проверили слушающие TCP-порты IPv4 и состояние MPTCP.
ss -lnt4State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*sysctl net.mptcp.enablednet.mptcp.enabled = 0ss -lnMState Recv-Q Send-Q Local Address:Port Peer Address:PortTCP-порты IPv4, которые слушали на всех адресах (0.0.0.0), — это 80 и 443 веб-сервера и 22 для SSH.
[net.mptcp.enabled] был равен 0, и сокетов MPTCP не было, поэтому путь MPTCP, использованный в опубликованной атаке, был закрыт. Но ошибка начинается с обычных TCP-соединений по IPv4, поэтому серверу, который слушает три порта IPv4, патч всё равно нужен.
3️⃣ Обновление ядра Linux: семь пакетов ядра и перезагрузка
Перед сменой ядра мы создали в консоли Lightsail ручной снимок инстанса. В Lightsail нет экрана выбора ядра для загрузки, поэтому если сервер не поднимется с новым ядром, восстановить его можно, создав новый инстанс из этого снимка.
🔲 Симулятор снимков Lightsail
Linux 기반 블루프린트를 사용하는 인스턴스에 취약점(CVE-2026-98432)이 발생할 수 있습니다. 인스턴스가 영향을 받는지 확인하고 사용 중인 Linux 배포판에 최신 보안 업데이트를 적용하는 것이 좋습니다.
(us-east-1a)
스냅샷을 생성하여 인스턴스, 해당 시스템 디스크 및 연결된 디스크를 백업할 수 있습니다.
일일 스냅샷 시간은 오전 5:00 GMT+0입니다.Amazon은 가장 최근의 스냅샷 7개를 저장합니다.
🔲 Проверка обновления ядра Linux и перезагрузки
Исправленную версию ядра, опубликованную в репозитории, мы проверили списком dnf.
dnf --showduplicates list available kernel kernel-core kernel-modules kernel-modules-core kernel-tools kernel-tools-libs kernel-headerskernel.x86_64 5.14.0-687.64.1.el9_8 baseos
kernel-core.x86_64 5.14.0-687.64.1.el9_8 baseos
kernel-modules.x86_64 5.14.0-687.64.1.el9_8 baseos
kernel-modules-core.x86_64 5.14.0-687.64.1.el9_8 baseos
kernel-tools.x86_64 5.14.0-687.64.1.el9_8 baseos
kernel-tools-libs.x86_64 5.14.0-687.64.1.el9_8 baseos
kernel-headers.x86_64 5.14.0-687.64.1.el9_8 appstreamdnf download kernel-core-5.14.0-687.64.1.el9_8Скачивает в текущую папку только файл пакета kernel-core и не устанавливает его.
rpm -Kv kernel-core-5.14.0-687.64.1.el9_8.x86_64.rpm V4 RSA/SHA256 Signature, key ID b86b3716: OKrpm -qp --changelog kernel-core-5.14.0-687.64.1.el9_8.x86_64.rpm | grep CVE-2026-98432- ipv4: free inet_opt and ireq_opt after an RCU grace period (CKI Backport Bot) [RHEL-295635] {CVE-2026-98432}Подпись была OK, а в журнале изменений была строка с исправлением CVE-2026-98432. В бюллетенях безопасности dnf (updateinfo), которые мы проверили 3 ноября, этого CVE ещё не было, поэтому получить это ядро через [dnf upgrade --security] было нельзя.
Поэтому мы установили семь пакетов ядра, указав и версию.
dnf install -y kernel-5.14.0-687.64.1.el9_8 kernel-core-5.14.0-687.64.1.el9_8 kernel-modules-5.14.0-687.64.1.el9_8 kernel-modules-core-5.14.0-687.64.1.el9_8 kernel-tools-5.14.0-687.64.1.el9_8 kernel-tools-libs-5.14.0-687.64.1.el9_8 kernel-headers-5.14.0-687.64.1.el9_8================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
kernel x86_64 5.14.0-687.64.1.el9_8 baseos 1.1 M
kernel-core x86_64 5.14.0-687.64.1.el9_8 baseos 17 M
kernel-modules x86_64 5.14.0-687.64.1.el9_8 baseos 40 M
kernel-modules-core x86_64 5.14.0-687.64.1.el9_8 baseos 31 M
Upgrading:
kernel-headers x86_64 5.14.0-687.64.1.el9_8 appstream 2.6 M
kernel-tools x86_64 5.14.0-687.64.1.el9_8 baseos 1.3 M
kernel-tools-libs x86_64 5.14.0-687.64.1.el9_8 baseos 1.1 M
Removing:
kernel x86_64 5.14.0-611.30.1.el9_7 @baseos 0
kernel-core x86_64 5.14.0-611.30.1.el9_7 @baseos 64 M
kernel-modules x86_64 5.14.0-611.30.1.el9_7 @baseos 33 M
kernel-modules-core x86_64 5.14.0-611.30.1.el9_7 @baseos 27 M
Transaction Summary
================================================================================
Install 4 Packages
Upgrade 3 Packages
Remove 4 Packages
Total download size: 94 M
Complete!Были установлены четыре новых пакета ядра, обновлены три пакета kernel-headers, kernel-tools и kernel-tools-libs, а другие пакеты не изменились. Из-за параметра [installonly_limit=3], который хранит до трёх установленных ядер, были удалены четыре пакета самого старого ядра 5.14.0-611.30.1.el9_7; от загрузки до завершения прошло 74 секунды.
Официальная команда из объявления AlmaLinux заново получает данные репозиториев, а затем обновляет все пакеты, для которых есть обновления.
sudo dnf clean metadata && sudo dnf upgradeПоскольку вместе с ядром обновляются и другие пакеты, порядок обновления всей версии дистрибутива описан в статье Обновление Alma Linux: 9.4 → 9.8 в LightSail.
Новое ядро начинает работать только после перезагрузки.
systemctl rebootПосле того как сервер снова включился, мы по очереди проверили работающее ядро, установленные ядра и ядро по умолчанию.
uname -r5.14.0-687.64.1.el9_8.x86_64rpm -q kernelkernel-5.14.0-687.49.1.el9_8.x86_64
kernel-5.14.0-687.55.1.el9_8.x86_64
kernel-5.14.0-687.64.1.el9_8.x86_64grubby --default-kernel/boot/vmlinuz-5.14.0-687.64.1.el9_8.x86_64Сервер снова включился меньше чем через минуту после команды перезагрузки, и работающее ядро, и ядро по умолчанию для следующей загрузки сменились на 5.14.0-687.64.1.el9_8. Прежнее ядро 5.14.0-687.55.1.el9_8 осталось, поэтому если с новым ядром возникнут проблемы, ядро по умолчанию можно вернуть.
| Параметр | До патча | После патча |
|---|---|---|
| Работающее ядро (uname -r) | 5.14.0-687.55.1.el9_8 | 5.14.0-687.64.1.el9_8 |
| Ядро по умолчанию (grubby) | 5.14.0-687.55.1.el9_8 | 5.14.0-687.64.1.el9_8 |
| Установленные ядра (rpm -q kernel) | 5.14.0-611.30.1.el9_7, 5.14.0-687.49.1.el9_8, 5.14.0-687.55.1.el9_8 | 5.14.0-687.49.1.el9_8, 5.14.0-687.55.1.el9_8, 5.14.0-687.64.1.el9_8 |
4️⃣ Временная блокировка до перезагрузки: правила nft и их ограничения
Если перезагрузить сервер сразу нельзя, до установки исправленного ядра можно временным правилом заблокировать пакеты, которые запускают ошибку. Команды этого раздела мы сами не выполняли; они взяты из официальных рекомендаций (объявлений AlmaLinux и AWS).
На сервере Lightsail с AlmaLinux 9.8, Nginx и Apache перезагрузка занимает всего несколько минут, поэтому мы сразу обновили ядро без временной блокировки.
Ошибка запускается только запросами на TCP-соединение с параметрами IPv4. Обычный трафик почти не использует параметры IPv4, поэтому если блокировать только TCP-пакеты IPv4 с параметрами, обычные соединения продолжат работать как прежде.
sudo dnf install -y nftablesКоманда nft входит в пакет nftables, который устанавливается вместе с firewalld. Если на вашем сервере этой команды нет, сначала установите пакет.
sudo nft -f - <<'EOF'
add table ip cve_2026_98432
delete table ip cve_2026_98432
table ip cve_2026_98432 {
chain prerouting {
type filter hook prerouting priority -300; policy accept;
meta l4proto tcp ip hdrlength > 5 counter drop
}
}
EOFСоздаёт таблицу, которая на этапе prerouting отбрасывает TCP-пакеты с длиной заголовка IPv4 больше 5, то есть пакеты с параметрами IPv4. Это правило AlmaLinux проверила на 8, 9 и 10; его можно использовать вместе с firewalld и безопасно запускать несколько раз.
sudo nft list table ip cve_2026_98432Проверяет, что правило добавлено; значение counter в выводе — число пакетов, отброшенных к этому моменту.
sudo nft delete table ip cve_2026_98432После перезагрузки с исправленным ядром удалите таблицу этой командой.
Это правило исчезает после перезагрузки, поэтому если вы перезагрузились до установки исправленного ядра, снова выполните команду, создающую таблицу.
Это правило не подходит серверам с приложениями, которые полагаются на параметры IPv4. Пример — сети с метками безопасности CIPSO (NetLabel), которые передаются в параметрах IPv4; в конфигурации по умолчанию они не используются.
Правило защищает хост и контейнеры, получающие трафик через хост (режим по умолчанию в Podman и Docker). Трафик, которым обмениваются контейнеры на одном хосте, может обойти это правило.
В Debian, Ubuntu и openSUSE используйте однострочное правило iptables из руководства AWS. В ядрах AlmaLinux 9 и CentOS Stream 9 нет модуля u32, который использует это правило, поэтому там применяйте правило nft выше.
sudo iptables -I INPUT 1 -p tcp -m u32 --u32 '0>>24&0x0f=6:15' -j DROPВыражение u32 читает поле длины заголовка IPv4; если значение больше 5, у пакета есть параметры IPv4. После установки исправленного ядра удалите это правило командой ниже.
sudo iptables -D INPUT -p tcp -m u32 --u32 '0>>24&0x0f=6:15' -j DROPЗакрыть в брандмауэре Lightsail неиспользуемые порты и ограничить остальные доверенными IP-адресами — ещё одна мера, которую рекомендует руководство AWS.
🔢 FAQ & рекомендуемые материалы
Версия ядра
Команды для проверки версии ядра Linux и способ проверить версию дистрибутива
В Linux версию ядра можно проверить командой uname.
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.