Luka w jądrze Linux CVE-2026-98432: tymczasowa blokada i instalacja poprawki jądra
CVE-2026-98432 to podatność jądra Linux, w której kod jądra przyjmujący połączenia TCP IPv4 ponownie odczytuje już zwolnioną pamięć; zespół CVE jądra Linux ocenił ją jako Critical. Ponieważ lukę można zaatakować zdalnie bez uwierzytelniania, zaktualizowaliśmy serwer Lightsail z AlmaLinux 9.8, Nginx i Apache do pakietów poprawionego jądra, uruchomiliśmy go ponownie i sprawdziliśmy poprawkę po wersji działającego jądra.
1️⃣ Luka w jądrze Linux CVE-2026-98432: jak działa i kogo dotyczy
Gdy przychodzi żądanie połączenia TCP (SYN) z opcjami IPv4, jądro przechowuje kopię tych opcji razem z oczekującym połączeniem, aby odesłać je w odpowiedzi (SYN-ACK). Po nawiązaniu połączenia ta kopia trafia bez duplikowania prosto do gniazda nowego połączenia.
Jeśli w tym czasie klient wyśle SYN ponownie, inny procesor może właśnie budować SYN-ACK z tymi samymi opcjami. Jeśli wtedy nowe połączenie się zamknie, a jądro od razu zwolni pamięć opcji, kod budujący SYN-ACK odczyta już zwolnioną pamięć: to use-after-free.
Ten kod działa na etapie, gdy jądro obsługuje żądanie połączenia, zanim aplikacja w ogóle zobaczy połączenie. Dlatego niezależnie od tego, która usługa otworzyła port, jeśli nasłuchuje on przez TCP IPv4, atak może do niego dotrzeć zdalnie bez danych logowania, a wynik według CVSS 3.1 to 9.8.
Luka istnieje od Linux 4.4, więc dotyczy większości serwerów z Linuksem. Spośród blueprintów Lightsail poradnik AWS wymienia AlmaLinux 9, CentOS Stream 9, Debiana, openSUSE Leap, Ubuntu oraz Amazon Linux 2 i Amazon Linux 2023. Komunikat AlmaLinux wymienia wersje 8, 9 i 10, a blueprinty aplikacji Lightsail, takie jak WordPress i LAMP, też działają na Debianie lub Ubuntu, więc również ich to dotyczy.
FreeBSD i Windows Server, które nie używają jądra Linux, nie są objęte luką.
Serwery z wyłączonym MPTCP (Multipath TCP) też potrzebują poprawki. Opublikowany atak celował w serwery z otwartym nasłuchem MPTCP, ale sama luka jest w zwykłym kodzie TCP IPv4, dlatego komunikat AlmaLinux mówi, że systemy bez MPTCP także trzeba poprawić.
Poprawione jądro zwalnia pamięć opcji dopiero po upływie okresu karencji RCU (grace period), więc pamięć zostaje na miejscu, dopóki inny procesor odczytuje opcje, budując SYN-ACK.
2️⃣ Sprawdzanie wersji jądra Linux: czy jądro jest poprawione?
To, czy poprawka jest potrzebna, zależy od wersji działającego jądra, więc przed aktualizacją najpierw sprawdziliśmy dystrybucję i wersję jądra.
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 foundDystrybucja to AlmaLinux 9.8, a działające jądro to 5.14.0-687.55.1.el9_8. Nie było też polecenia nft, którego używa tymczasowa reguła blokująca, więc pakiet nftables nie był zainstalowany.
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] wyświetla listę zainstalowanych jąder, ale do ponownego uruchomienia naprawdę działa tylko to jedno, które pokazuje [uname -r]. Porównaj tę wersję z poprawioną wersją z komunikatu AlmaLinux.
| Dystrybucja | Wersja poprawionego jądra (ta wersja lub nowsza) |
|---|---|
| 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 była niższa niż 5.14.0-687.64.1.el9_8, poprawiona wersja dla AlmaLinux 9, więc wymagała aktualizacji.
Aby zobaczyć, czy droga dla ataku jest otwarta, sprawdziliśmy nasłuchujące porty TCP IPv4 i stan 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:PortPorty TCP IPv4 nasłuchujące na wszystkich adresach (0.0.0.0) to 80 i 443 serwera WWW oraz 22 dla SSH.
[net.mptcp.enabled] miało wartość 0 i nie było gniazd MPTCP, więc ścieżka MPTCP użyta w opublikowanym ataku była zamknięta. Luka zaczyna się jednak od zwykłych połączeń TCP IPv4, więc serwer nasłuchujący na trzech portach IPv4 nadal potrzebuje poprawki.
3️⃣ Aktualizacja jądra Linux: siedem pakietów jądra i ponowne uruchomienie
Przed zmianą jądra utworzyliśmy w konsoli Lightsail ręczną migawkę instancji. Lightsail nie ma ekranu do wyboru jądra startowego, więc jeśli serwer nie wstanie z nowym jądrem, przywracasz go, tworząc z tej migawki nową instancję.
🔲 Symulator migawek Lightsail
Linux 기반 블루프린트를 사용하는 인스턴스에 취약점(CVE-2026-98432)이 발생할 수 있습니다. 인스턴스가 영향을 받는지 확인하고 사용 중인 Linux 배포판에 최신 보안 업데이트를 적용하는 것이 좋습니다.
(us-east-1a)
스냅샷을 생성하여 인스턴스, 해당 시스템 디스크 및 연결된 디스크를 백업할 수 있습니다.
일일 스냅샷 시간은 오전 5:00 GMT+0입니다.Amazon은 가장 최근의 스냅샷 7개를 저장합니다.
🔲 Sprawdzanie aktualizacji jądra Linux i ponownego uruchomienia
Poprawioną wersję jądra dostępną w repozytorium sprawdziliśmy listą 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_8Pobiera do bieżącego folderu tylko plik pakietu kernel-core, bez instalowania.
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}Podpis był OK, a w dzienniku zmian była linia poprawiająca CVE-2026-98432. W biuletynach bezpieczeństwa dnf (updateinfo), które sprawdziliśmy 3 listopada, tego CVE jeszcze nie było, więc przez [dnf upgrade --security] nie dało się pobrać tego jądra.
Dlatego zainstalowaliśmy siedem pakietów jądra, podając też wersję.
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!Zainstalowano cztery nowe pakiety jądra, zaktualizowano trzy pakiety kernel-headers, kernel-tools i kernel-tools-libs, a żaden inny pakiet się nie zmienił. Ponieważ ustawienie [installonly_limit=3] zachowuje do trzech zainstalowanych jąder, usunięto cztery pakiety najstarszego, 5.14.0-611.30.1.el9_7; od pobierania do zakończenia minęło 74 sekundy.
Oficjalne polecenie podane w komunikacie AlmaLinux pobiera na nowo informacje o repozytoriach, a potem aktualizuje wszystkie pakiety, dla których jest aktualizacja.
sudo dnf clean metadata && sudo dnf upgradePonieważ oprócz jądra aktualizowane są też inne pakiety, kroki aktualizacji całej wersji dystrybucji znajdziesz w artykule Aktualizacja Alma Linux: 9.4 → 9.8 w LightSail.
Nowe jądro zaczyna działać dopiero po ponownym uruchomieniu.
systemctl rebootPo ponownym uruchomieniu serwera sprawdziliśmy po kolei działające jądro, zainstalowane jądra i jądro domyślne.
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_64Serwer wstał w niecałą minutę po poleceniu ponownego uruchomienia, a działające jądro i jądro domyślne dla następnego startu zmieniły się na 5.14.0-687.64.1.el9_8. Poprzednie jądro 5.14.0-687.55.1.el9_8 nadal jest zainstalowane, więc jeśli nowe jądro sprawi problemy, możesz przywrócić jądro domyślne.
| Pozycja | Przed poprawką | Po poprawce |
|---|---|---|
| Działające jądro (uname -r) | 5.14.0-687.55.1.el9_8 | 5.14.0-687.64.1.el9_8 |
| Jądro domyślne (grubby) | 5.14.0-687.55.1.el9_8 | 5.14.0-687.64.1.el9_8 |
| Zainstalowane jądra (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️⃣ Tymczasowa blokada przed ponownym uruchomieniem: reguły nft i ich ograniczenia
Jeśli nie możesz od razu uruchomić serwera ponownie, do czasu instalacji poprawionego jądra możesz zablokować tymczasową regułą pakiety, które wyzwalają lukę. Poleceń z tej części nie uruchamialiśmy sami; opierają się na oficjalnych zaleceniach (komunikatach AlmaLinux i AWS).
Na serwerze Lightsail z AlmaLinux 9.8, Nginx i Apache ponowne uruchomienie trwa tylko kilka minut, więc zaktualizowaliśmy jądro od razu, bez tymczasowej blokady.
Lukę wyzwalają tylko żądania połączenia TCP z opcjami IPv4. Zwykły ruch prawie nie używa opcji IPv4, więc blokując tylko pakiety TCP IPv4 z opcjami, zachowujesz normalne połączenia.
sudo dnf install -y nftablesPolecenie nft jest w pakiecie nftables, instalowanym razem z firewalld. Jeśli na serwerze nie ma tego polecenia, najpierw zainstaluj pakiet.
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
}
}
EOFTworzy tabelę, która na etapie prerouting odrzuca pakiety TCP z długością nagłówka IPv4 większą niż 5, czyli pakiety z opcjami IPv4. To reguła przetestowana przez AlmaLinux na wersjach 8, 9 i 10; można jej używać razem z firewalld i bezpiecznie uruchamiać wiele razy.
sudo nft list table ip cve_2026_98432Sprawdza, czy reguła działa; wartość counter w wyniku to liczba dotąd odrzuconych pakietów.
sudo nft delete table ip cve_2026_98432Po ponownym uruchomieniu z poprawionym jądrem usuń tabelę tym poleceniem.
Ta reguła znika po ponownym uruchomieniu, więc jeśli uruchomiłeś serwer ponownie przed instalacją poprawionego jądra, uruchom jeszcze raz polecenie tworzące tabelę.
Ta reguła nie pasuje do serwerów z aplikacjami, które polegają na opcjach IPv4. Przykładem są sieci używające etykiet bezpieczeństwa CIPSO (NetLabel), przenoszonych w opcjach IPv4; w domyślnej konfiguracji nie są używane.
Reguła chroni hosta i kontenery, które odbierają ruch przez hosta (domyślny tryb Podmana i Dockera). Ruch wymieniany między kontenerami na tym samym hoście może ominąć tę regułę.
Na Debianie, Ubuntu i openSUSE użyj jednowierszowej reguły iptables z poradnika AWS. Jądra AlmaLinux 9 i CentOS Stream 9 nie mają dopasowania u32, którego używa ta reguła, więc tam użyj reguły nft powyżej.
sudo iptables -I INPUT 1 -p tcp -m u32 --u32 '0>>24&0x0f=6:15' -j DROPWyrażenie u32 odczytuje pole długości nagłówka IPv4; wartość większa niż 5 oznacza pakiet z opcjami IPv4. Po zainstalowaniu poprawionego jądra usuń tę regułę poleceniem poniżej.
sudo iptables -D INPUT -p tcp -m u32 --u32 '0>>24&0x0f=6:15' -j DROPZamknięcie nieużywanych portów w zaporze Lightsail i ograniczenie pozostałych do zaufanych adresów IP to kolejna metoda zalecana w poradniku AWS.
🔢 FAQ & polecane treści
Wersja jądra
Polecenia do sprawdzania wersji jądra Linux i jak sprawdzić wersję dystrybucji
W Linuksie wersję jądra sprawdzisz poleceniem uname.
ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.