CVE-2026-98432とは - LinuxカーネルのIPv4 TCPの解放後使用と、ディストリビューションごとの対応

CVE-2026-98432とは - LinuxカーネルのIPv4 TCPの解放後使用と、ディストリビューションごとの対応

作成日:
読了:約19分
更新日:

CVE-2026-98432は、LinuxカーネルがIPv4のTCP接続を受け付ける処理(3ウェイハンドシェイク)に見つかった、解放後使用(use-after-free)の脆弱性です。カーネルのCVEチームは2026年10月15日に公開し、CVSS 3.1で9.8(Critical)と評価しています。ネットワーク越しに、認証なしで、IPv4のTCPポートで待ち受けているサーバーへ届く経路です。

問題が入り込んだのはLinux 4.4で、10年近く前からある処理です。修正はカーネルの安定版の8つの系列に入っていますが、ディストリビューションによって修正版の提供状況が分かれています。この記事では、カーネルのCVEチームの記録と修正コミット、各ディストリビューションのセキュリティ情報をもとに、仕組みと対応を整理します(2026年11月2日時点)。

まず結論 - やること

  • IPv4のTCPポートを外部に開けているLinuxサーバーは、すべて対象として考えます。Webサーバー、SSH、データベースなど、サービスの種類は関係ありません。
  • ディストリビューションの修正済みカーネルに更新し、再起動します。カーネルの更新は、再起動するまで効きません。
  • 修正版がまだ出ていない、または今すぐ再起動できない場合は、IPv4オプション付きのTCPパケットを落とすnftablesのルールで、既知の入り口をふさぎます(後述)。
  • MPTCPを使っていないなら、net.mptcp.enabled=0で止めておくと、Anthropicが示した攻撃の経路は使えなくなります。ただし、バグはふつうのTCPの処理にあるので、これだけでは足りません。

CVE-2026-98432の概要

項目内容
対象Linuxカーネル(net/ipv4/af_inet.c、net/ipv4/tcp_ipv4.c)
種類解放後使用(use-after-free)。複数のCPUの間の競合で起きる
入り口IPv4オプションを付けたTCPのSYNパケット
CVSS 3.19.8(カーネルのCVEチーム)、9.8(Red Hat)、8.1(SUSE)
影響を受ける版4.4以降
修正e3f33b0a1d89(ipv4: free inet_opt and ireq_opt after an RCU grace period)
修正の作者Eric Dumazet氏
報告者Xinyang Ge氏(Anthropic)
CISAのKEV2026年11月2日時点で掲載なし

修正コミットの日付は2026年10月1日で、メインラインには7.3-rc7で入りました(DebianのSecurity Trackerの記載)。NVDの状態は「Received」で、NVD自身の評価はまだ付いていません。

タイムライン

日付できごと
2026-10-01Eric Dumazet氏が修正パッチを作成
2026-10-15カーネルのCVEチームがCVE-2026-98432を公開。CVSS 9.8
2026-10-27ごろAnthropicが、未公開のClaudeのモデルがこの脆弱性からリモートでroot権限を得るエクスプロイトを作ったと公表したと報じられる
2026-10-30AlmaLinuxが修正済みカーネルをtestingリポジトリで公開。Amazon Linux 2の追加カーネルにも修正版
2026-11-01Red HatがRHEL 8、9、10の修正版(RHSA-2026:93412〜93415)を公開

脆弱性の仕組み

TCPの接続は、クライアントのSYN、サーバーのSYN-ACK、クライアントのACKの3つのパケットで始まります(TCPの3ウェイハンドシェイク)。今回の問題は、SYNにIPv4オプションが付いていたときの、その後始末にあります。

IPv4のヘッダーには、経路を記録するRecord Routeや、時刻を記録するTimestampといったオプションを付けられます。ふだんの通信ではまず使われませんが、カーネルはSYNに付いてきたオプションを、接続待ちの要求(リクエストソケット)に保存しておき、SYN-ACKを返すときに使います。

問題が起きる流れは次のとおりです。

  1. 攻撃者が、IPv4オプション付きのSYNを送ります。カーネルはオプションをireq->ireq_optに保存します。
  2. ハンドシェイクが終わると、tcp_v4_syn_recv_sock()がこのオプションを、コピーせずにそのまま新しい接続のソケット(newinet->inet_opt)へ引き渡します。
  3. ちょうどそのとき、攻撃者が同じ要求に対するSYNを再送します。別のCPUが、再送されたSYNに応えてSYN-ACKを組み立て始め、同じオプションを読みます。
  4. その間に攻撃者が接続を閉じると、新しいソケットが解放されます。このときinet_sock_destruct()が、オプションをふつうのkfree()で即座に解放してしまいます。
  5. SYN-ACKを組み立てている側のip_options_build()は、すでに解放されたメモリを読み続けます。

SYN-ACKを組み立てる側は、RCU(読み手を止めずにデータを差し替える仕組み)の読み取りロックの中でオプションを読んでいました。ところが解放する側はRCUを使わず、読み手がいなくなるのを待たずに解放していました。修正は、解放をkfree_rcu()に変え、読んでいるCPUがいなくなってから解放するというものです。同じオプションを差し替えるほかの経路(setsockoptなど)は、もともとkfree_rcu()を使っていました。

この競合が起きうるようになったのは、Linux 4.4のコミット079096f103fa(tcp/dccp: install syn_recv requests into ehash table)からです。この変更で、接続待ちの要求をリスナーのロックなしで処理するようになり、SYN-ACKを組み立てている最中に新しいソケットが解放されるのを止めるものがなくなりました。

もう1つの経路: リクエストソケットの移行

CVEの説明には、似た問題がもう1つ書かれています。net.ipv4.tcp_migrate_req=1を設定しているか、BPFのBPF_SK_REUSEPORT_SELECT_OR_MIGRATEプログラムを使っている場合です。接続待ちの要求を別のリスナーへ移すとき、古い要求と複製が同じオプションを共有し、片方が解放されたあとも、もう片方を使っているCPUが読み続けることがあります。tcp_migrate_reqは既定では無効です。

IPv6は対象外

IPv6のTCPは、ハンドシェイクの終わりにオプションを複製しているため、主な問題の影響を受けません。IPv6には移行の経路で似た問題が残っていますが、対象はCALIPSO(IPv6のセキュリティラベル)を使った場合だけで、別のパッチで直すとされています。

カーネルのメモリ管理の考え方は、メモリアロケータの記事でも扱っています。

危険度

カーネルのCVEチームは、CVSSの各項目に理由を添えています。要点は次のとおりです。

項目評価理由(CVEの記録から要約)
攻撃元ネットワーク認証のない相手が、IPv4のRecord RouteかTimestampを付けたSYNを送るだけで入り口に届く
攻撃の複雑さ低攻撃者は要求の作成と、再送するSYNと接続の終了の競合を何度でも繰り返せる
必要な権限、ユーザーの関与なしアプリが認証する前の、ハンドシェイクの段階で起きる
機密性高解放されたメモリの中身が、SYN-ACKに入って攻撃者へ送り返されうる
完全性高解放された領域を作り直されると、古い長さや位置の値に従ってカーネルの範囲外に書き込みうる
可用性高skb_under_panic()などでカーネルが落ちうる

Red Hatも9.8のCriticalと評価しています。理由として、特別な設定なしにふつうのIPv4 TCPの通信で届くことを挙げています。一方で、競合のタイミングに依存するため、任意のコードを確実に実行するにはヒープを細かく操る必要があるとも書いています。SUSEの評価は8.1(Important)です。

実際の攻撃の報告は、2026年11月2日時点で見当たりません。CISAの悪用が確認された脆弱性の一覧(KEV)にも載っていません(KEVのデータで確認)。

AnthropicのエクスプロイトとMPTCP

この脆弱性を報告したのは、AnthropicのXinyang Ge氏です(修正コミットのReported-by)。AlmaLinuxのブログによると、Anthropicは、自社のエクスプロイトがMPTCP(Multipath TCP)で待ち受けているLinuxサーバーに対して、リモートの攻撃者にrootとしてコマンドを実行させられると述べています。

報道では、次のような内容も伝えられています。

  • エクスプロイトを作ったのは、公開されていないClaudeのモデル
  • カーネルのポインタの漏えいから、rootでのコマンド実行まで約53分
  • エクスプロイトのコード、試したカーネルの版や設定は公開していない
  • MPTCPを止めるだけでは足りず、修正済みのカーネルへの更新が一番の対策

ただし、筆者はAnthropicの元の発表を確認できていません(未確認)。上の内容は、AlmaLinuxのブログと報道によるものです。

MPTCPは、1つの接続で複数の経路(Wi-Fiとモバイル回線など)を同時に使えるようにするTCPの拡張です。カーネルのnet.mptcp.enabledの既定値は1(有効)です(カーネルのドキュメント)が、アプリが明示的にMPTCPのソケットを作らない限り、MPTCPで待ち受けることはありません。AlmaLinuxは、MPTCPを既定で止めて出荷していると説明しています。

注意したいのはGoです。Go 1.24から、net.ListenConfigはMPTCPに対応したシステム(今はLinuxだけ)で、既定でMPTCPを使うようになりました(Go 1.24のリリースノート)。Go 1.24以降で作ったサーバーは、自分で設定していなくてもMPTCPで待ち受けている可能性があります。

いずれにしても、バグはふつうのIPv4 TCPの処理にあります。MPTCPの有無にかかわらず、修正済みのカーネルに更新する必要があります。

影響を受けるバージョンと修正版

カーネルの安定版では、次の版で直っています。

系列修正版
5.105.10.272
5.155.15.223
6.16.1.190
6.66.6.159
6.126.12.113
6.186.18.56
7.27.2.10
メインライン7.3

ディストリビューションのカーネルは、版の番号が上の表と一致しません。修正を取り込んだかどうかは、各ディストリビューションの情報で確かめます。

ディストリビューションごとの状況(2026年11月2日時点)

ディストリビューション状況
Debian 12(bookworm)修正済み。linux 6.1.190-1(DLA-4841-1)、linux-6.12 6.12.113-1~deb12u1(DLA-4850-1)
Debian 13(trixie)修正済み。linux 6.12.113-1(DSA-6568-1)
RHEL 8、9、102026-11-01に修正版。RHSA-2026:93412〜93415
RHEL 6、7影響なし(Red Hatの判定)
AlmaLinux 8、9、1010-30の時点でtestingリポジトリに修正版。本番のリポジトリへの公開はブログで知らせるとのこと
Ubuntu 26.04、24.04、22.04修正前(work in progress)。予定の版は26.04が7.0.0-43.43、24.04が6.8.0-149.149、22.04が5.15.0-203.213
Ubuntu 20.04、18.04修正前(Vulnerable)
Amazon Linux 2追加カーネル(5.4、5.10、5.15)に10-30付けの修正版
SUSESLES 15 SP7などに修正版。製品によっては対応中(Pending)

AlmaLinuxは、RHELの修正を待たずに、安定版カーネルの修正を自分たちで取り込んだと説明しています。10月30日のブログにある修正版は、AlmaLinux 8がkernel-4.18.0-553.180.2.el8_10、9がkernel-5.14.0-687.61.2.el9_8、10がkernel-6.12.0-211.69.2.el10_2です。

Ubuntuは、記事を書いた時点で修正版が出ていません。Ubuntuのサーバーでは、次の緩和策を先に入れておくのが現実的です。

構成ごとの対応方法

Debian、Ubuntu

カーネルを更新して再起動する
sudo apt update
sudo apt full-upgrade
sudo reboot

Ubuntuは修正版が出たら、同じ手順で入ります。Debianでは、apt list --installed 'linux-image*'で入っている版を見て、上の表の版以上になっているかを確かめます。

RHEL、AlmaLinux、Rocky Linux など

カーネルを更新して再起動する
sudo dnf update 'kernel*'
sudo reboot

AlmaLinuxでtestingの修正版を先に入れる場合は、ブログの手順どおり--enablerepo=almalinux-testingを付けて更新し、再起動のあとでtestingのリポジトリを無効に戻します。本番のマシンでtestingのリポジトリを有効のままにしないよう注意します。

クラウドとコンテナ

  • コンテナはホストのカーネルを共有しているので、コンテナのイメージを更新しても直りません。直すのはホスト(Kubernetesならノード)のカーネルです。
  • マネージドなKubernetesでは、修正済みのノードイメージに入れ替えます。
  • ロードバランサーがTCPの接続を終端している構成では、外からのSYNは直接サーバーに届きません。ただし、ロードバランサーを通らない経路(管理用のSSHなど)が開いていれば、そこが入り口になります。

すぐに更新できないときの緩和策

IPv4オプション付きのTCPパケットを落とす

この脆弱性の入り口は、IPv4オプションを付けたTCPのSYNです。ふつうの通信でIPv4オプションはまず使われないため、オプション付きのTCPパケットを落としても、通常の接続には影響しません。AlmaLinuxが示しているnftablesのルールは次のとおりです。

IPv4オプション付きのTCPパケットを落とす(AlmaLinuxのブログより)
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
  }
}
EOF

ip hdrlengthはIPv4ヘッダーの長さ(4バイト単位)で、オプションがなければ5です。5より大きいTCPパケットだけを落とします。priority -300で、接続の追跡(conntrack)より前に処理します。先頭のaddとdeleteは、同じテーブルが残っていても作り直せるようにするためのものです。

ルールが入ったか、落としたパケットの数を見る
sudo nft list table ip cve_2026_98432

このルールはnftablesの設定ファイルに書いていないので、再起動すると消えます。再起動するときは修正済みのカーネルに入れ替わっているはずなので、そのまま消えてかまいません。修正版を入れたあとに外すときは、sudo nft delete table ip cve_2026_98432を実行します。

ネットワークの機器やクラウドのファイアウォールで、IPv4オプション付きのパケットを落とせる場合は、そちらでも同じ効果があります。

使っていないならMPTCPを止める

MPTCPの状態を見る・止める
sysctl net.mptcp.enabled
sudo sysctl -w net.mptcp.enabled=0

再起動後も止めておくなら、/etc/sysctl.d/に設定ファイルを置きます。MPTCPを使うアプリがある場合は、止めると影響が出ます。繰り返しになりますが、これはAnthropicが示した経路を減らすもので、脆弱性そのものの対策ではありません。

影響を受けるか・更新できたかを確かめる

確認に使うコマンド
# 動いているカーネルの版(更新後は再起動してから見る)
uname -r
 
# IPv4で待ち受けているTCPのポート
ss -4ltn
 
# MPTCPで待ち受けているソケット
ss -Mltn
 
# IPv4オプション付きのパケットを落とすルールが効いているか
sudo nft list table ip cve_2026_98432

uname -rの版が、ディストリビューションの修正版になっているかを確かめます。パッケージを入れただけで再起動していないと、古いカーネルのまま動いています。

まとめ

  • CVE-2026-98432は、IPv4オプション付きのSYNを入り口とする、LinuxカーネルのTCPの解放後使用です。Linux 4.4以降が対象で、CVSSは9.8です。
  • 原因は、SYN-ACKを組み立てる側がRCUで読んでいるオプションを、ソケットを解放する側がRCUを待たずに解放していたことです。修正はkfree_rcu()への変更です。
  • Anthropicは、MPTCPで待ち受けるサーバーでリモートからrootを取れると主張していますが、詳細は公開されていません。バグ自体はふつうのTCPにあるので、MPTCPを止めるだけでは足りません。
  • 対策は、修正済みのカーネルへの更新と再起動です。Ubuntuなど修正版がまだないディストリビューションでは、IPv4オプション付きのTCPパケットを落とすnftablesのルールで入り口をふさいでおきます。

同じ年に見つかったLinuxカーネルの脆弱性としては、ローカルの権限昇格のBad epoll(CVE-2026-46242)も記事にしています。カーネルとユーザー空間の境目については、システムコールの記事も参考になります。

参考資料

CVE-2026-112816とは - LXDのHTTPS APIで信頼済みのクライアントになりすませる認証回避と、MicroCloud・Incusの対応

CVE-2026-112816とは - LXDのHTTPS APIで信頼済みのクライアントになりすませる認証回避と、MicroCloud・Incusの対応

約16分

CanonicalのLXDで、HTTPS APIのクライアント証明書の検証に不備があり、信頼済みクライアントの公開証明書さえあれば、そのクライアントとして認証されてしまう脆弱性CVE-2026-112816(CVSS 4.0で10.0)を、CVEの記録、Canonicalの告知、Incusのアドバイザリと修正コミットで整理します。仕組み、影響を受ける版と修正版(snapの各チャンネル、MicroCloud、Incus、Debianのパッケージ)、HTTPS APIを公開しているかの確かめ方、すぐに更新できないときの緩和策まで。

HTTP2Shell(CVE-2026-111497)とは - Brotli の展開処理の範囲外書き込みと、Node.js・Python・サーバー構成別の対応

HTTP2Shell(CVE-2026-111497)とは - Brotli の展開処理の範囲外書き込みと、Node.js・Python・サーバー構成別の対応

約32分

Google の圧縮ライブラリ Brotli の C 実装で見つかった範囲外書き込みの脆弱性 CVE-2026-111497(通称 HTTP2Shell / Node2Shell)を、CVE レコード・Node.js・各ベンダーのアドバイザリで整理します。仕組みと危険度、攻撃データが入り込む経路、Node.js・Express・Next.js・Bun・Python・nginx・Apache・curl・.NET・OS パッケージごとの対応方法、すぐに更新できないときの緩和策と確認コマンドまで。

PHP2Shell(CVE-2026-109618 / CVE-2026-109619)とは - PHP 本体の認証不要 RCE 2件の危険度と構成別の対応

PHP2Shell(CVE-2026-109618 / CVE-2026-109619)とは - PHP 本体の認証不要 RCE 2件の危険度と構成別の対応

約30分

2026年10月21日に PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 で修正された、認証不要のリモートコード実行(RCE)につながる2件の脆弱性 CVE-2026-109618 と CVE-2026-109619(通称 PHP2Shell)を、php.net・GitHub のアドバイザリ・NVD・各ディストリビューションの情報で整理します。それぞれの仕組みと危険度、mod_php・PHP-FPM・Docker・OS パッケージ・レンタルサーバーなど構成ごとの対応方法、すぐに更新できないときの緩和策まで。

楽天市場のおすすめPR / 楽天アフィリエイト