カーネルTCPスタックにおけるリモートから悪用可能な脆弱性 Linux

Anthropic社は、カーネルTCPスタックにおける重大な脆弱性(CVE-2026-98432)を公表しました。 Linuxこれは、特別に細工されたパケットを送信することでリモートでのコード実行を可能にするものです。カーネルレベルでのコード実行と、システム上でのリモートからのルート権限取得を可能にする、動作するエクスプロイトが報告されています。このエクスプロイトは、マルチパスTCP(MPTCP)プロトコルをサポートするネットワークソケットを介して接続を受け入れるサーバープロセスを持つシステムを攻撃するのに適しています。MPTCPサポートはネットワークソケットごとに有効にすることができ、これはGo 1.24(2025年2月)以降のGo標準ライブラリのデフォルト設定です。

準備されたエクスプロイトは、Caddy HTTPサーバーを含む、Go言語で記述されたあらゆるサーバーアプリケーションで使用できます。ただし、そのアプリケーションが作成するリスニングソケットにネットワークパケットを送信できることが条件となります。この脆弱性はIPv4スタックに直接存在し、MPTCP固有のものではないため、MPTCPに依存しないエクスプロイトを作成することが可能ですが、そのようなエクスプロイトはまだ実証されていません。例えば、net.ipv4.tcp_migrate_req=1パラメータを指定した構成で利用可能なソケット移行要求を処理する場合、またはBPF_SK_REUSEPORT_SELECT_OR_MIGRATEオプションを指定したeBPFプログラムを使用する場合に、この脆弱性を悪用することが可能です。

この脆弱性は、TCP接続確立中に再送信されたSYN要求を同時に処理する際に発生する競合状態によって引き起こされます。tcp_v4_syn_recv_sock()関数は、ireq->ireq_opt構造体から子ソケットにパラメータをコピーするのではなく参照を介して渡すため、特定の状況下では、ソケットパラメータを含むinet_opt構造体とireq_opt構造体のメモリが既に解放されているにもかかわらず、関連するソケットオプションが引き続き使用される(解放後使用)という状況が発生します。

リモートからの攻撃は、時間同期された一連のネットワーク要求を送信することによって実行されます。この攻撃は、アドレスランダム化(KASLR)を使用するカーネルに有効ですが、競合状態の発生条件を満たすにはかなりの時間と多数の再試行が必要です。競合状態の発生条件を満たせなかった場合でも、カーネルがクラッシュするのではなくハンドシェイクが行われるだけなので、攻撃は簡略化され、無期限に試行できます。攻撃のプロトタイプでは、攻撃に約1時間かかりました。メモリレイアウトの特定に48分、コード実行の準備にさらに5分を要しました。

現時点では、この脆弱性を確実に修正できる回避策は存在しません。カーネルのアップデートをインストールすることが唯一確実な方法です。この問題はカーネルから発生します。 Linux 4.4 で発生し、リリース 5.10.272、5.15.223、6.1.190、6.6.159、6.12.113、6.18.56、7.2.10、および 7.3 で修正されました。ディストリビューションにおける脆弱性修正の状況は、以下のページで確認できます。 Debian, UbuntuSUSE/openSUSE、RHEL、Gentoo、Arch、
Fedora。

脆弱性を全体的にブロックしない特定の悪用方法に対処するための推奨事項としては、MPTCPサポートを無効にし、カーネルのsysctlパラメータnet.ipv4.tcp_migrate_reqを0に設定することが挙げられます。

sysctl -w net.mptcp.enabled=0
sysctl -w net.ipv4.tcp_migrate_req=0

システム内にソケットを使用するプロセスが存在するかどうかを判断するには
MPTCPでは、以下のコマンドを使用できます。

ip mptcp endpoint show
ip mptcp limits show

Go プログラムで MPTCP サポートを無効にするには、「GODEBUG=multipathtcp=0」環境変数を設定することで設定できる「multipathtcp=0」フラグを使用します。ビルド時に MPTCP サポートを無効にするには、go.mod ファイルに「godebug multipathtcp=0」を追加します。アプリケーション コードでは、net.Dialer.SetMultipathTCP 関数と net.ListenConfig.SetMultipathTCP 関数を使用して MPTCP を無効にすることができます。

議論された問題に加えて、Anthropicはカーネルに存在する一連のローカルで悪用可能な脆弱性についても発表した。 Linuxシステムへのルートアクセスと隔離されたコンテナからの脱出を可能にする、OpenBSDおよびFreeBSDの脆弱性。特別に設計されたWebページを開いたときにシステム上でコード実行につながるChromeおよびSafariの脆弱性。カーネルの脆弱性 Windowsクラッシュにつながる。プラットフォームの脆弱性 Androidこれにより、画面ロックを回避して、デバイスのロックを解除せずに個人情報や写真にアクセスできるようになります(この攻撃はGoogle Pixel 9スマートフォンで実証されました)。

追加:

  • nginxでは、リスニングネットワークソケットに対してIPPROTO_MPTCPオプションを有効にする機能はバージョン1.29.7以降に存在していますが、デフォルトでは使用されていません。
  • Lighttpdでは、バージョン1.4.76以降、MPTCPを有効にするオプションが利用可能です。
  • Apache httpdでは、MPTCPをサポートするためのパッチが2024年にApache httpd 2.5-HEADブランチに追加されました。
  • systemdでは、ソケット経由でアクティブ化された場合にMPTCPを有効にするサポートがバージョン257で追加されました。
  • Apache Traffic Serverでは、バージョン9.2.4以降、MPTCPを有効にするオプションがサポートされています。
  • HAProxyでは、バージョン3.1.0以降でオプション「mptcp{,4,6}@」が利用可能です。 「。
  • Traefikでは、リリース2.11.26、3.4.2、およびv3.5.0-rc1以降、IPPROTO_MPTCPフラグの設定がデフォルトで有効になっています。
  • Valkey DBMSでは、バージョン9.0.0以降、オプション「--mptcp」と設定「mptcp yes」および「repl-mptcp yes」が利用可能です。

出所: オープンネット.ru

DDoS 保護機能を備えた信頼性の高いサイト用ホスティング、VPS VDS サーバーを購入する 🔥 DDoS攻撃対策付きの信頼性の高いウェブサイトホスティング、VPS/VDSサーバーを購入しましょう | ProHoster