
CVE-2026-98432(Linux IPv4 TCP inet_opt UAF):読み取り専用の診断スクリプト、再起動不要のnftables/sysctl緩和策、Ansibleによる展開と対応ガイド(EN/KO)
CVE-2026-98432 対応キット — Linux カーネルが TCP 接続を確立する際に使用するコードに存在するメモリ安全性のバグです。以下の3つが含まれています:
iptables、または iptables が存在しない場合は nftables を使用)、カーネル設定(sysctl)ファイル、Ansible プレイブック。いずれも再起動なしで適用できます。デフォルトモードではパケットをカウントするだけです。2026-11-03 時点の内容です。 ここに記載する緩和策はすべて一時的なものであり、カーネルの修正を置き換えるものではありません。 カーネルの更新と再起動(またはライブパッチ)は別途スケジュールしてください。
| README | ガイド | 診断スクリプト | |
|---|---|---|---|
| 🇺🇸 英語(デフォルト) | README.md | cve-2026-98432-guide.en.md | check_cve_2026_98432.sh |
| 🇰🇷 한국어 | README.ko.md | cve-2026-98432-guide.ko.md | check_cve_2026_98432_ko.sh |
iptables を使用し、再起動は不要です。安全のため、まずはカウントのみから開始し、正当なトラフィックに影響がないことを確認してからドロップに切り替えてください。TCP 接続要求の IP ヘッダーには、まれに IPv4 オプションと呼ばれる追加フィールドが含まれることがあります。カーネルは接続確立中、これらのオプションをメモリ上に保持します。クリーンアップの際、別の CPU コアがまだそのメモリを読み取っている可能性があるにもかかわらず、そのメモリを即座に解放してしまいました。
解放された後のメモリを使用することを**use-after-free(UAF)**と呼びます。その間に別のデータがその領域に配置されていると、カーネルは誤ったデータを読み取り、以下のような事態につながる可能性があります:
| 項目 | 詳細 |
|---|---|
| 影響範囲 | Linux 4.4 以降、各ブランチの修正バージョンより前。IPv6 は影響を受けません |
| 深刻度 | Kernel CNA、Red Hat、Ubuntu による CVSS 9.8(Critical)。SUSE、Amazon、Oracle は 8.1 と評価しています。CPU 間のタイミング競合に勝つことが困難なためです |
| 根本原因 | カーネルの安全な解放期間(RCU grace period)を待たずにメモリを解放していました。アップストリームの修正:コミット e3f33b0a1d89(kfree → kfree_rcu) |
| 修正済みカーネルバージョン | 5.10.272、5.15.223、6.1.190、6.6.159、6.12.113、6.18.56、7.2.10、7.3 以降 — ディストリビューションのカーネルについては、バージョン番号ではなく修正が含まれているかどうかを確認してください |
悪用状況: 2026-11-03 時点で CISA KEV(悪用が確認されている脆弱性のカタログ)には登録されておらず、実世界での攻撃も報告されていません。多くの GitHub リポジトリが「PoC」を自称していますが、検証されたものはありません — 本番ネットワークで実行しないでください。
ディストリビューション別の修正済みカーネル(バージョンと出典はガイド §2.2を参照)
| ディストリビューション | ステータス |
|---|---|
| RHEL 8 / 9 / 10 | ✅ 修正済みカーネルを 2026-11-01 にリリース(RHSA-2026:93414 / 93412 / 93413)。OpenShift(RHCOS)ノードは未修正 |
| Debian 12 / 13 | ✅ 修正済み(DSA-6568-1、DLA-4841-1、DLA-4850-1) |
| Amazon Linux 2 / 2023 | ✅ 修正済み。EKS/ECS 最適化 AMI、Fargate、Bottlerocket は順次展開中 |
| Rocky Linux(CIQ RLC Pro / LTS) | ✅ CIQ がサポートするすべてのバリアントで修正済み。コミュニティ版 Rocky については Rocky Errata を確認してください |
| Ubuntu 22.04 / 24.04 / 26.04 / 26.10 | ⏳ 対応中(2026-11-03 時点で「作業中」) |
| Ubuntu 16.04 / 18.04 / 20.04 | ⏳ 標準サポートは終了 — 修正は Ubuntu Pro(ESM)購読者向けのみとなる見込み |
| SUSE、Oracle Linux、AlmaLinux など | 修正が報告されています — 各ベンダーのアドバイザリを確認してください |
4. 今すぐ行うべきことにある診断スクリプトが正確な判定を出します。おおよその目安は次のとおりです:
攻撃が成立するには、① サーバーに少なくとも 2 つの CPU コアが必要で(2 つのコアが同時に同じメモリにアクセスする必要があります)、② 攻撃者のパケットがIPv4 オプションを保持したままサーバーに到達する必要があります。
| # | サーバーの状況 | リスク | 対応 |
|---|---|---|---|
| 1 | 内部 VPC または Kubernetes ノード上で、マルチコアかつ MPTCP リスナーあり(コンテナ内を含む) | 🔴 リモートからの root 取得 | ファイアウォールルールと sysctl を今すぐ適用し、ノードのカーネルにパッチを適用する。一部の Kubernetes ネットワーク(eBPF ベースの CNI)はホストのファイアウォールをバイパスするため、パッチ適用を優先する |
| 2 | パブリック IP 上、または L4 ロードバランサー(AWS NLB など)の背後で、MPTCP リスナーあり | 🔴 リモートからの root 取得 | ファイアウォールルールと sysctl を今すぐ適用する |
| 3 | マルチコアで、通常の TCP サービスのみ | 🟠 リモートからのクラッシュ | ファイアウォールルールを適用する(sysctl だけでは不十分) |
| 4 | シングル CPU(1 vCPU) | 🟡 成功する可能性は極めて低い | 通常のパッチサイクルに含める |
| 5 | L7 プロキシ経由でのみ到達可能(AWS ALB、CloudFront、Cloudflare など)で、内部アクセスが制御されている | 🟡 攻撃パケットが到達しない | 内部の攻撃者に備えてパッチを適用する |
⚠️ 「MPTCP リスナーがないから安全」と結論づけないでください。 Red Hat は MPTCP リスナーの確認は「安心材料ではなく情報提供」だと述べています。MPTCP がなくてもクラッシュは起こり得るうえ、MPTCP を必要としない別の悪用手法も排除できません。また、RHEL 8 系カーネルでは
ss -Mが MPTCP リスナーを通常の TCP として表示することがあります。
💡 L4 と L7 の違い: L7 プロキシはクライアントの TCP 接続を終端し、サーバーへの新しい接続を張り直すため、攻撃者の IPv4 オプションがサーバーに届くことはありません。L4 ロードバランサー(AWS NLB の TCP リスナー、Global Accelerator、PrivateLink、VPC Lattice など)はパケットをそのまま通過させるため、サーバーを直接公開するのと同じになります。
パッチ適用状況、緩和策、露出状況(コンテナを含む)をチェックし、リスクレベルを提示する読み取り専用スクリプトです。
sudo bash check_cve_2026_98432.sh
判定の根拠を確認するには:
sudo bash check_cve_2026_98432.sh --verbose
0 パッチ適用済みまたは緩和済み · 10 対応が必要 · 1 エラー · 2 無効なオプションuname -r のバージョン番号では判定されません。ディストリビューションはバージョンを維持したまま修正を古いカーネルにコピーする(バックポート)ことが多いため、スクリプトはこの CVE がカーネルパッケージの changelog または livepatch リストに記録されているかどうかを確認します。--online を指定すると apt changelog に問い合わせます。--no-netns はコンテナのネットワークチェックをスキップします。これはほとんどのサーバーにすでに導入されている iptables を使用するため、新たにインストールするものはありません。drop ルールは予期しない正当なトラフィックをブロックする可能性があるため、デフォルトはカウントのみ(監視)モードです。ドロップは drop を指定した場合にのみ実行されます。
① カウントのみ(デフォルト)。 IPv4 オプションを含む TCP パケットをドロップせずにカウントします。
sudo bash mitigation/cve-2026-98432-iptables.sh apply
営業時間中(理想的には数日間)監視してから、カウンターを確認してください。packets が 0 でない場合は、まずそのトラフィックがどこから来ているのかを突き止めてください。
sudo bash mitigation/cve-2026-98432-iptables.sh status
② 正規のトラフィックが存在しない場合は、drop に切り替える(まずは少数のホストで)。同じルールを置き換えるため、重複は発生しない。
sudo bash mitigation/cve-2026-98432-iptables.sh apply drop
⚠️ ステップ①は何もブロックしないため、サーバーは依然として露出したままです。カウンターを確認したら、ステップ②への移行をスケジュールしてください。🔴 高リスクのサーバー(MPTCP リスナー、または L4 経由で直接露出している場合)では、カウント期間を短く保つこと(数時間程度)を検討してください。
③ 再起動をまたいで維持する。 モードは /etc/default/cve-2026-98432 の MODE(monitor または drop)から取得されます。
sudo install -m 0755 mitigation/cve-2026-98432-iptables.sh /usr/local/sbin/cve-2026-98432-iptables
sudo install -m 0644 mitigation/cve-2026-98432-iptables.service /etc/systemd/system/
echo MODE=monitor | sudo tee /etc/default/cve-2026-98432
sudo systemctl daemon-reload && sudo systemctl enable --now cve-2026-98432-iptables.service
モードを切り替えるには、そのファイル内の MODE を編集し、sudo systemctl restart cve-2026-98432-iptables.service を実行します。
このルールはTCP のみに適用されます。IGMP(マルチキャスト)など一部のプロトコルは IPv4 オプションを正当に使用しており、オプション付きのすべてのパケットをブロックするとマルチキャストが壊れる可能性があります。
iptables を持たないホスト(Amazon Linux 2023 など)では、nft で同じルールを適用できます。カウントには cve-2026-98432-monitor.nft、ドロップには cve-2026-98432.nft を使用します(ガイド §3.1.2)。
sudo nft -f mitigation/cve-2026-98432-monitor.nft
④ カーネル設定(sysctl)で攻撃条件を軽減する。 MPTCP を無効化し(net.mptcp.enabled=0)、接続要求のマイグレーションを無効化します(net.ipv4.tcp_migrate_req=0)。
sudo install -m 0644 mitigation/99-mitigate-cve-2026-98432.conf /etc/sysctl.d/ && sudo sysctl --system