Lỗ hổng kernel Linux CVE-2026-98432: chặn tạm thời và áp dụng bản vá kernel
CVE-2026-98432 là lỗ hổng kernel Linux, trong đó mã kernel nhận kết nối TCP IPv4 đọc lại vùng nhớ đã được giải phóng, và nhóm CVE của kernel Linux đánh giá ở mức Critical. Vì đây là lỗi có thể bị tấn công từ xa mà không cần xác thực, chúng tôi đã cập nhật máy chủ Lightsail AlmaLinux 9.8 dùng Nginx và Apache lên các gói kernel đã sửa, khởi động lại, rồi xác nhận bản vá qua phiên bản kernel đang chạy.
1️⃣ Lỗ hổng kernel Linux CVE-2026-98432: cơ chế lỗi và phạm vi ảnh hưởng
Khi một yêu cầu kết nối TCP (SYN) đến kèm tùy chọn IPv4, kernel giữ một bản sao của các tùy chọn đó cùng với kết nối đang chờ để gửi lại trong phản hồi (SYN-ACK). Khi kết nối được thiết lập, bản sao này được chuyển thẳng sang socket của kết nối mới mà không nhân bản.
Nếu trong lúc đó máy khách gửi lại SYN, một CPU khác có thể đang tạo SYN-ACK với cùng tùy chọn. Lúc này nếu kết nối mới bị đóng và kernel giải phóng ngay vùng nhớ tùy chọn, đoạn mã đang tạo SYN-ACK sẽ đọc vùng nhớ đã được giải phóng, tức là use-after-free.
Đoạn mã này chạy ở giai đoạn kernel xử lý yêu cầu kết nối, trước khi ứng dụng thấy kết nối. Vì vậy, dù cổng do dịch vụ nào mở, chỉ cần cổng đó đang lắng nghe qua TCP IPv4 thì cuộc tấn công có thể tiếp cận từ xa mà không cần thông tin xác thực, và điểm số là 9.8 theo CVSS 3.1.
Lỗi này có từ Linux 4.4 nên phần lớn máy chủ Linux đều bị ảnh hưởng. Trong các blueprint của Lightsail, hướng dẫn của AWS nêu AlmaLinux 9, CentOS Stream 9, Debian, openSUSE Leap, Ubuntu cùng Amazon Linux 2, Amazon Linux 2023. Thông báo của AlmaLinux nêu cả 8, 9 và 10 là đối tượng, và các blueprint ứng dụng của Lightsail như WordPress và LAMP cũng chạy trên Debian hoặc Ubuntu nên cũng bị ảnh hưởng.
FreeBSD và Windows Server, vốn không dùng kernel Linux, không bị ảnh hưởng.
Máy chủ đã tắt MPTCP (Multipath TCP) vẫn cần vá. Cuộc tấn công được công bố nhắm vào máy chủ có listener MPTCP đang mở, nhưng bản thân lỗi nằm trong mã TCP IPv4 thông thường, nên thông báo của AlmaLinux cũng cho biết hệ thống không có MPTCP vẫn phải sửa.
Kernel đã sửa chỉ giải phóng vùng nhớ tùy chọn sau khi hết thời gian ân hạn RCU (grace period), nên vùng nhớ vẫn được giữ trong lúc CPU khác đọc tùy chọn để tạo SYN-ACK.
2️⃣ Kiểm tra phiên bản kernel Linux: kernel đã được sửa chưa?
Có cần vá hay không phụ thuộc vào phiên bản kernel đang chạy, nên trước khi cập nhật, chúng tôi kiểm tra bản phân phối và phiên bản kernel trước.
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 foundBản phân phối là AlmaLinux 9.8, kernel đang chạy là 5.14.0-687.55.1.el9_8. Lệnh nft dùng cho quy tắc chặn tạm thời cũng không có, nghĩa là gói nftables chưa được cài.
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] in ra danh sách kernel đã cài, nhưng cho đến khi khởi động lại, kernel thực sự đang chạy chỉ là kernel hiện trong [uname -r]. Hãy so sánh phiên bản này với phiên bản đã sửa trong thông báo của AlmaLinux.
| Bản phân phối | Phiên bản kernel đã sửa (phiên bản này trở lên) |
|---|---|
| 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 thấp hơn 5.14.0-687.64.1.el9_8, phiên bản đã sửa của AlmaLinux 9, nên cần cập nhật.
Để xem đường tấn công có đang mở hay không, chúng tôi kiểm tra các cổng TCP IPv4 đang lắng nghe và trạng thái 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:PortCác cổng TCP IPv4 lắng nghe trên mọi địa chỉ (0.0.0.0) là 80, 443 của máy chủ web và 22 của SSH.
[net.mptcp.enabled] là 0 và không có socket MPTCP nào, nên đường MPTCP mà cuộc tấn công được công bố sử dụng đã bị đóng. Tuy vậy lỗi bắt đầu từ kết nối TCP IPv4 thông thường, nên máy chủ lắng nghe ba cổng IPv4 vẫn cần vá.
3️⃣ Cập nhật kernel Linux: bảy gói kernel và khởi động lại
Trước khi thay kernel, chúng tôi đã tạo snapshot thủ công của instance trong bảng điều khiển Lightsail. Lightsail không có màn hình chọn kernel khởi động, nên nếu máy chủ không lên được với kernel mới, bạn khôi phục bằng cách tạo instance mới từ snapshot này.
🔲 Trình mô phỏng snapshot Lightsail
Linux 기반 블루프린트를 사용하는 인스턴스에 취약점(CVE-2026-98432)이 발생할 수 있습니다. 인스턴스가 영향을 받는지 확인하고 사용 중인 Linux 배포판에 최신 보안 업데이트를 적용하는 것이 좋습니다.
(us-east-1a)
스냅샷을 생성하여 인스턴스, 해당 시스템 디스크 및 연결된 디스크를 백업할 수 있습니다.
일일 스냅샷 시간은 오전 5:00 GMT+0입니다.Amazon은 가장 최근의 스냅샷 7개를 저장합니다.
🔲 Kiểm tra cập nhật kernel Linux và khởi động lại
Chúng tôi kiểm tra phiên bản kernel đã sửa có trong kho bằng danh sách của 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_8Chỉ tải tệp gói kernel-core về thư mục hiện tại, không cài đặt.
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}Chữ ký là OK, và nhật ký thay đổi có dòng sửa CVE-2026-98432. Các thông báo bảo mật của dnf (updateinfo) mà chúng tôi kiểm tra ngày 3 tháng 11 vẫn chưa có CVE này, nên chưa thể lấy kernel này bằng [dnf upgrade --security].
Vì vậy, chúng tôi đã cài bảy gói kernel và chỉ định cả phiên bản.
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!Bốn gói kernel mới được cài, ba gói kernel-headers, kernel-tools và kernel-tools-libs được nâng cấp, và không gói nào khác thay đổi. Do thiết lập [installonly_limit=3] chỉ giữ tối đa ba kernel đã cài, bốn gói của kernel cũ nhất 5.14.0-611.30.1.el9_7 đã bị xóa, và từ lúc tải về đến khi hoàn tất mất 74 giây.
Lệnh chuẩn chính thức mà thông báo của AlmaLinux hướng dẫn sẽ tải lại thông tin kho rồi nâng cấp mọi gói có bản cập nhật.
sudo dnf clean metadata && sudo dnf upgradeVì các gói khác ngoài kernel cũng được nâng cấp theo, các bước nâng cấp toàn bộ phiên bản bản phân phối có trong Cập nhật Alma Linux: 9.4 → 9.8 trên LightSail.
Kernel mới chỉ có hiệu lực sau khi khởi động lại.
systemctl rebootSau khi máy chủ khởi động lại, chúng tôi lần lượt kiểm tra kernel đang chạy, các kernel đã cài và kernel mặc định.
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_64Máy chủ hoạt động trở lại chưa đến một phút sau lệnh khởi động lại, và cả kernel đang chạy lẫn kernel mặc định cho lần khởi động tiếp theo đều đổi sang 5.14.0-687.64.1.el9_8. Kernel trước đó 5.14.0-687.55.1.el9_8 vẫn còn, nên nếu kernel mới gặp sự cố, bạn có thể đặt lại kernel mặc định.
| Hạng mục | Trước khi vá | Sau khi vá |
|---|---|---|
| Kernel đang chạy (uname -r) | 5.14.0-687.55.1.el9_8 | 5.14.0-687.64.1.el9_8 |
| Kernel mặc định (grubby) | 5.14.0-687.55.1.el9_8 | 5.14.0-687.64.1.el9_8 |
| Kernel đã cài (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️⃣ Chặn tạm thời trước khi khởi động lại: quy tắc nft và giới hạn
Khi chưa thể khởi động lại ngay, bạn có thể chặn các gói tin gây ra lỗi bằng quy tắc tạm thời cho đến khi cài kernel đã sửa. Các lệnh trong phần này chúng tôi không tự chạy mà theo hướng dẫn chính thức (thông báo của AlmaLinux và AWS).
Máy chủ Lightsail AlmaLinux 9.8 dùng Nginx và Apache chỉ mất vài phút để khởi động lại, nên chúng tôi cập nhật kernel ngay mà không chặn tạm thời.
Lỗi chỉ bắt đầu từ yêu cầu kết nối TCP có kèm tùy chọn IPv4. Lưu lượng thông thường hầu như không dùng tùy chọn IPv4, nên chỉ chặn gói TCP IPv4 có tùy chọn thì các kết nối bình thường vẫn giữ nguyên.
sudo dnf install -y nftablesLệnh nft nằm trong gói nftables, được cài cùng với firewalld. Nếu máy chủ của bạn không có lệnh này, hãy cài gói trước.
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
}
}
EOFTạo một bảng chặn ở giai đoạn prerouting các gói TCP có độ dài header IPv4 lớn hơn 5, tức là gói có tùy chọn IPv4. Đây là quy tắc AlmaLinux đã thử trên 8, 9 và 10; có thể dùng cùng firewalld và chạy nhiều lần vẫn an toàn.
sudo nft list table ip cve_2026_98432Kiểm tra quy tắc đã được thêm chưa; giá trị counter trong kết quả là số gói đã bị chặn đến nay.
sudo nft delete table ip cve_2026_98432Sau khi khởi động lại bằng kernel đã sửa, hãy xóa bảng bằng lệnh này.
Quy tắc này mất đi khi khởi động lại, nên nếu bạn đã khởi động lại trước khi cài kernel đã sửa, hãy chạy lại lệnh tạo bảng.
Quy tắc này không phù hợp với máy chủ có ứng dụng phụ thuộc vào tùy chọn IPv4. Ví dụ là các mạng dùng nhãn bảo mật CIPSO (NetLabel) được mang trong tùy chọn IPv4; cấu hình mặc định không dùng đến.
Quy tắc bảo vệ máy chủ host và các container nhận lưu lượng qua host (cách mặc định của Podman và Docker). Lưu lượng trao đổi giữa các container trên cùng một host có thể vượt qua quy tắc này.
Trên Debian, Ubuntu và openSUSE, hãy dùng quy tắc iptables một dòng trong hướng dẫn của AWS. Kernel của AlmaLinux 9 và CentOS Stream 9 không có match u32 mà quy tắc này dùng, nên hãy dùng quy tắc nft ở trên.
sudo iptables -I INPUT 1 -p tcp -m u32 --u32 '0>>24&0x0f=6:15' -j DROPBiểu thức u32 đọc trường độ dài header IPv4; nếu giá trị lớn hơn 5 thì gói có tùy chọn IPv4. Sau khi cài kernel đã sửa, hãy xóa quy tắc này bằng lệnh bên dưới.
sudo iptables -D INPUT -p tcp -m u32 --u32 '0>>24&0x0f=6:15' -j DROPĐóng các cổng không dùng trong tường lửa Lightsail và chỉ cho phép các cổng còn lại từ địa chỉ IP tin cậy cũng là cách được hướng dẫn của AWS khuyến nghị kèm theo.
🔢 FAQ & nội dung đề xuất
Phiên bản kernel
Lệnh kiểm tra phiên bản kernel Linux và cách kiểm tra phiên bản bản phân phối
Trên Linux, bạn có thể kiểm tra phiên bản kernel bằng lệnh uname.
ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.