
UbuntuカーネルのCVE-2026-98432に対するパッチ適用状態を評価し、IPオプションを含むIPv4 TCPパケットをドロップする永続的なnftablesまたはiptablesの暫定対策を適用するシェルスクリプトです。
# 1. Inspect the host; no changes.
sudo ./cve-2026-98432-mitigate.sh check
# 2. Get a patch-state verdict for the exact running kernel package.
sudo ./cve-2026-98432-mitigate.sh assess
# 3. Apply the stopgap filter and make it survive reboot.
sudo ./cve-2026-98432-mitigate.sh enable
# 4. Prove that normal TCP still works and IP-option TCP is dropped.
sudo ./cve-2026-98432-mitigate.sh verify
# 5. Monitor. Exit 0 = healthy, 1 = mismatch/persistence failure, 2 = no state.
sudo ./cve-2026-98432-mitigate.sh status
# 6. After booting a kernel that Ubuntu marks as fixed.
sudo ./cve-2026-98432-mitigate.sh disable
enable は CIPSO/NetLabel が検出されるとルールセットの変更を拒否します。これは、このルールが IP オプションを含むすべての TCP をドロップするためであり、ラベル付きトラフィックも含まれるからです。このトレードオフを受け入れる場合にのみ --ignore-cipso を使用してください。systemd のないコンテナやホストでは --no-persist を使用してください。そうしない場合、再起動後の永続化を確立できないときに enable はアクティブなルールを維持したまま終了コード 4 で終了します。
CVE-2026-98432 は Linux IPv4 TCP ハンドシェイクにおける use-after-free です。受信 SYN が IP オプションを運ぶ場合に到達可能です。本当の修正はパッチ適用済みカーネルです。このスクリプトは暫定措置であり、IP ヘッダ長が 5 より大きい(IHL 6-15)、すなわち IP オプションを運ぶ受信 IPv4 TCP パケットを、conntrack と Docker NAT の前にドロップします。
2 つの等価なバックエンドをサポートします:
table ip cve_2026_98432、prerouting 優先度 -310、TCP のみ、カウンタ、ドロップ。raw PREROUTING、u32 マッチ 0>>24&0xf=6:15、TCP のみ、カウンタ、ドロップ。nft の形式は ip ファミリと数値優先度を使用するため、Ubuntu 16.04 の nft 0.5 でも最新の nft 1.x でも動作します。iptables の形式は iptables 1.6 以降で動作します。--install-nft が渡されない限り、パッケージはインストールされません。
スクリプトは断片ではなく、完全な期待ルールを検証します。nft では、pre チェーンが正確に優先度 -310(またはレガシーな raw - 10 表記)で prerouting フックを持ち、期待される DROP が最初のルールであることを要求します。iptables では、iptables -C が成功し、正規化後に完全な最初の raw PREROUTING ルールが一致することを要求します。enable は再適用を拒否する代わりに、ずれたルールを修復します。
Akamai のスクリプトは以下の評価と安全性のアイデアを提供しました。その適用形式は採用されていません。我々のものがより厳格で 16.04 互換だからです。取り込んだ最も重要な知見を優先順に示します:
assess は実行中カーネルの正確なイメージパッケージを解決します(linux-image-$KVER、次に linux-image-unsigned-$KVER、次に /boot/vmlinuz-$KVER の所有者)。linux-image-generic のようなメタパッケージはコンテキストとしてのみ表示され、判定の証拠としては決して使用されません。changelog のヒットは強力だが誤りうる証拠です。changelog が欠けていても、修正済みリリース以上の独立して決定的なクリーンなアップストリームバージョンがあれば PATCHED になります。証拠のないベンダーカーネルは UNKNOWN になります。enable は終了コード 4 で終了します。status は oneshot の実行時状態とは独立に永続化を評価し、enabled-runtime を非永続として拒否します。detected はデフォルトで拒否し、unknown は警告し、not_detected は続行します。netlabelctl の欠如は CIPSO が存在しないことを証明しません。check は検証済み使用可能、存在するが未検証、使用不可、不明を区別します。--backend nft は iptables が動作していても nft を評価します。XDP_PASS は依然としてカーネルスタックに入ります。-x)出力を使用し、以前のバージョンからのレガシーな filter/INPUT ルールは、raw の置き換えがロードされた後に報告され削除されます。ルールのマッチと状態ファイルの形式は後方互換です。先に disable する必要はありません。このバージョンで enable を再実行すると、ルールがその場で修復され、更新されたブートユニットがインストールされ、新しい永続化フィールドが記録されます。古い状態ファイルに persist= 行がない場合、status は欠落フィールドで失敗する代わりに、ユニットの状態から永続化を推測します。
把握しておくべき運用上の変更点:
enable は、ルールが有効であるものの再起動後の永続化に失敗した場合に終了コード 4 を返すようになりました。以前はその場合に 0 を返すことがありました。check は、検証済みで使用可能なバックエンドの場合のみ 0 を返し、使用可能なバックエンドがない場合は 1、存在するが未検証の場合は 4、使用方法の誤りの場合は 2 を返すようになりました。assess は新規で、以下に記載のとおり 0/1/3/4 を返します。--ignore-cipso を渡さない限り enable を拒否するようになりました。ExecStart を適用するために enable を再実行してください。作成日: 2026-10-30 (更新 2026-10-31)
Ubuntu トラッカー確認日時: 2026-10-31 11:59 UTC (ページ最終更新 2026-10-30)。修正済みカーネルはまだ出荷されていません。
対象範囲: Linux サーバー、主に Ubuntu 16.04 (xenial)、22.04 (jammy)、24.04 (noble)、26.04 (resolute)、Docker/BTCPay ホストを含む。
成果物: このディレクトリ内の cve-2026-98432-mitigate.sh。
テスト済み環境: Ubuntu 16.04、22.04、24.04、26.04。
6.8.0-149.149)、22.04 (5.15.0-203.213)、26.04 (7.0.0-43.43)、26.10 (7.3.0-10.10) について、依然として「vulnerable work in progress」と表示しています。Ubuntu の説明より:
tcp_v4_syn_recv_sock() は ireq->ireq_opt の所有権を子ソケット(newinet->inet_opt)に コピーせずに 移譲します。tcp_check_req() から SYNACK を送信する可能性があります。tcp_v4_send_synack() と inet_csk_route_req() は rcu_read_lock() の下でのみ ireq->ireq_opt を読み取ります。079096f103fa)、SYNACK がまだ構築されている間に子ソケットが解放される可能性があります。TCP の子ソケットには SOCK_RCU_FREE がなく、inet_sock_destruct() は inet_opt を単純な kfree() で解放するため、ip_options_build() における use-after-free が発生します。net.ipv4.tcp_migrate_req=1、または BPF_SK_REUSEPORT_SELECT_OR_MIGRATE プログラム)を伴う第 2 の変種も存在します。inet_reqsk_clone() は ireq_opt を共有し、tcp_v4_reqsk_destructor() も単純な kfree() を使用します。inet_sock_destruct() と tcp_v4_reqsk_destructor() で kfree_rcu() を使用することです。tcp_v6_syn_recv_sock() がオプションを複製するため、最初の問題の影響を受けません。IPv6 のマイグレーション/CALIPSO の問題は別のパッチで対処されています。実際の露出: IPv4 TCP サービスを実行しているホスト(SSH、Web、Docker で公開されたポート、BTCPay、Lightning など)はすべて到達可能です。トリガーは IP ヘッダ長が 5 より大きい SYN(つまり IP オプションが存在するもの)です。通常の TCP オプション(MSS、ウィンドウスケール、SACK、タイムスタンプ)は IP オプションではなく、影響を受けません。
影響を受ける Ubuntu リリースのいずれに対しても、修正済みカーネルは公開されていません。 以下のステータスは前回の確認から変わっていません。
| リリース | カーネル系列 | Ubuntu ステータス |
|---|---|---|
| 26.10 stonking | 7.3 | 脆弱、修正作業中 7.3.0-10.10 |
| 26.04 LTS resolute | 7.0 | 脆弱、修正作業中 7.0.0-43.43 |
| 24.04 LTS noble | 6.8 | 脆弱、修正作業中 6.8.0-149.149 |
| 24.04 HWE 6.17 / 7.0 | 6.17 / 7.0 | 脆弱 |
| 22.04 LTS jammy | 5.15 | 脆弱、修正作業中 5.15.0-203.213 |
| 22.04 HWE 6.8 | 6.8 | 脆弱、修正作業中 6.8.0-149.149~22.04.1 |
| 20.04 LTS focal | 5.4 | 脆弱 |
| 18.04 LTS bionic | 4.15 | 脆弱 |
| 16.04 LTS xenial | 4.4 | 脆弱 |
| 14.04 LTS trusty | 3.13(デフォルト) | 影響なし、HWE カーネルは影響を受ける可能性あり |
クラウドおよび派生カーネル(aws、azure、gcp、gke、oracle、ibm、nvidia、lowlatency など)も脆弱または修正作業中としてリストされています。実行している特定のカーネルパッケージを確認してください。トラッカーにはそれぞれが記載されています。