Linux カーネルの脆弱性 CVE-2026-98432:一時的な遮断とカーネルパッチの適用
CVE-2026-98432 は、IPv4 TCP 接続を受け付けるカーネルコードが解放済みのメモリを再び読み取る Linux カーネルの脆弱性で、Linux カーネル CVE チームが Critical と評価しました。認証なしでリモートから攻撃できる欠陥のため、Nginx と Apache 構成の AlmaLinux 9.8 Lightsail サーバーで修正済みのカーネルパッケージに更新して再起動し、実行中のカーネルバージョンでパッチを確認しました。
1️⃣ Linux カーネルの脆弱性 CVE-2026-98432:欠陥の仕組みと影響範囲
TCP 接続要求(SYN)に IPv4 オプションが付いて届くと、カーネルは応答(SYN-ACK)でそのオプションを送り返すために、コピーを待機中の接続と一緒に保管します。接続が確立すると、このコピーは複製されずにそのまま新しい接続のソケットへ渡されます。
その間にクライアントが SYN を再送すると、別の CPU が同じオプションで SYN-ACK を作っている途中かもしれません。このとき新しい接続が閉じてカーネルがオプションのメモリをすぐに解放すると、SYN-ACK を作っていたコードが解放済みのメモリを読む use-after-free が起きます。
このコードは、アプリケーションが接続を見る前、カーネルが接続要求を処理する段階で実行されます。そのため、どのサービスが開いたポートであっても IPv4 TCP で待ち受けていれば、リモートから認証情報なしで攻撃が届き、スコアは CVSS 3.1 で 9.8 です。
欠陥は Linux 4.4 から存在するため、ほとんどの Linux サーバーが該当します。AWS の案内は、Lightsail のブループリントのうち AlmaLinux 9、CentOS Stream 9、Debian、openSUSE Leap、Ubuntu と Amazon Linux 2、Amazon Linux 2023 を挙げました。AlmaLinux の告知は 8、9、10 のすべてを対象としており、Lightsail の WordPress や LAMP のようなアプリケーションブループリントも Debian や Ubuntu の上で動くため同じく対象です。
Linux カーネルを使わない FreeBSD と Windows Server は対象外です。
MPTCP(Multipath TCP)を無効にしたサーバーもパッチの対象です。公開された攻撃は MPTCP リスナーが開いているサーバーを狙いましたが、欠陥そのものは通常の IPv4 TCP コードにあるため、AlmaLinux の告知も MPTCP のないシステムも修正が必要だとしています。
修正済みカーネルはオプションのメモリを RCU の猶予期間(grace period)が過ぎてから解放するため、別の CPU が 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 より低く、更新の対象でした。
攻撃が届く経路が開いているかを見るため、待ち受けている IPv4 TCP ポートと 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:Portすべてのアドレス(0.0.0.0)で待ち受けている IPv4 TCP ポートは、Web サーバーの 80、443 と SSH の 22 でした。
[net.mptcp.enabled] が 0 で MPTCP ソケットもないため、公開された攻撃が使った MPTCP の経路は閉じていました。欠陥は通常の IPv4 TCP 接続から始まるので、IPv4 ポートを 3 つ待ち受けるサーバーはそのままパッチの対象です。
3️⃣ Linux カーネルの更新:カーネルパッケージ 7 つと再起動
カーネルを変える前に、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_8kernel-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 を修正した行がありました。11 月 3 日に確認した dnf のセキュリティアドバイザリ(updateinfo)にはこの CVE がまだなく、[dnf upgrade --security] ではこのカーネルを取得できない状態でした。
そこで、カーネルパッケージ 7 つをバージョンまで指定してインストールしました。
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!新しいカーネルパッケージ 4 つがインストールされ、kernel-headers、kernel-tools、kernel-tools-libs の 3 パッケージが更新され、ほかのパッケージは変わりませんでした。インストール済みカーネルを 3 つまで残す [installonly_limit=3] の設定により、最も古い 5.14.0-611.30.1.el9_7 のパッケージ 4 つが削除され、ダウンロードから完了まで 74 秒かかりました。
AlmaLinux の告知が案内する公式の基準コマンドは、リポジトリ情報を取得し直したうえで、更新のあるパッケージをすべて更新します。
sudo dnf clean metadata && sudo dnf upgradeカーネル以外のパッケージも一緒に更新されるため、ディストリビューションのバージョン全体を上げる手順は Alma Linux のアップデート:LightSail における 9.4 → 9.8で確認できます。
新しいカーネルは再起動しないと適用されません。
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サーバーは再起動コマンドから 1 分もたたずに再び起動し、実行中のカーネルと次回の起動で使う既定のカーネルがどちらも 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 の告知)です。
Nginx と Apache 構成の AlmaLinux 9.8 Lightsail サーバーは再起動が数分で終わるため、一時的な遮断はせずにすぐカーネルを更新しました。
欠陥は IPv4 オプションが付いた TCP 接続要求からしか始まりません。通常のトラフィックは IPv4 オプションをほとんど使わないため、オプションが付いた IPv4 TCP パケットだけを遮断しても普段の接続はそのまま保たれます。
sudo dnf install -y nftablesnft コマンドは firewalld と一緒にインストールされる nftables パッケージに含まれています。コマンドがないサーバーなら、先にインストールします。
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
}
}
EOFIPv4 ヘッダー長が 5 を超える TCP パケット、つまり IPv4 オプションが付いたパケットを prerouting の段階で遮断するテーブルを作ります。AlmaLinux が 8、9、10 で試したルールで、firewalld と一緒に使え、何度実行しても安全です。
sudo nft list table ip cve_2026_98432ルールが入ったかを確認します。出力の counter の値がこれまでに遮断したパケットの数です。
sudo nft delete table ip cve_2026_98432修正済みカーネルで再起動したあとは、このコマンドでテーブルを削除します。
このルールは再起動すると消えるため、修正済みカーネルを入れる前に再起動した場合は、テーブルを作るコマンドをもう一度実行します。
IPv4 オプションに頼るアプリケーションがあるサーバーには、このルールは合いません。IPv4 オプションで運ばれる CIPSO セキュリティラベル(NetLabel)を使うネットワークがその例で、既定の設定では使いません。
ルールはホストと、ホストを経由してトラフィックを受けるコンテナー(Podman と Docker の既定の方式)を守ります。同じホスト上のコンテナー同士でやり取りするトラフィックは、このルールをすり抜けることがあります。
Debian、Ubuntu、openSUSE では AWS の案内にある iptables ルール 1 行を使います。AlmaLinux 9 と CentOS Stream 9 のカーネルにはこのルールが使う u32 マッチがないため、上の nft ルールで進めます。
sudo iptables -I INPUT 1 -p tcp -m u32 --u32 '0>>24&0x0f=6:15' -j DROPu32 の式は IPv4 ヘッダー長の欄を読み、値が 5 より大きければ IPv4 オプションが付いたパケットです。修正済みカーネルを入れたあとは、下のコマンドでこのルールを削除します。
sudo iptables -D INPUT -p tcp -m u32 --u32 '0>>24&0x0f=6:15' -j DROPLightsail のファイアウォールで使っていないポートを閉じ、残りのポートを信頼できる IP アドレスだけに絞ることも AWS の案内が併せて勧めている方法です。
🔢 FAQ & おすすめコンテンツ
カーネルバージョン
Linux カーネルのバージョン確認コマンドとディストリビューションのバージョン確認方法
Linux では、カーネルバージョンは uname コマンドで確認できます。
ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。