2026年5月8日、独立研究者Hyunwoo Kimにより、CVE-2026-43284およびCVE-2026-43500が、Dirty Fragというニックネームで開示されました。Kimは、別の当事者が協調的な機密扱いを破ったため、パッチがリリースされる前に、予定より早く公開することを余儀なくされたと主張しています。この2つの脆弱性により、権限のないローカルユーザーが任意のページキャッシュを破損し、多くのLinuxディストリビューションでrootに昇格することができます。同じ日に動作する概念実証(PoC)が公開され、いかなるディストリビューションもパッチ済みカーネルを提供する前でした。
ESP脆弱性(CVE-2026-43284)は、2017年1月のコミットcac2661c53f3により導入され、IPsec ESPの受信が高速パス復号化に移動されました。RxRPC亜種(CVE-2026-43500)は、2023年6月に同じ高速パターンがrxrpに追加されたときに導入されました。脆弱性の導入と発見の間の長い間隔を考えると、両方ともAIの支援により特定された可能性があります。
Sysdig脅威研究チーム(TRT)はDirty Fragを分析して、両方の脆弱性がどのように悪用できるかを検討し、SysdigおよびOSS Falcoユーザーのランタイム検出カバレッジを検証し、セキュリティおよび開発チームの重要な推奨事項を提供しました。彼らの結果は以下にまとめられています。
影響を受けるバージョン
既知の影響を受けるバージョン:
- Linuxカーネル4.10から7.0
- ほぼすべてのLinuxディストリビューション、数年前にさかのぼって影響を受けています。
根本原因
Linuxは最近使用されたファイルをRAMにパフォーマンスキャッシュ(「ページキャッシュ」と呼ばれるもの)として保持しています。/usr/bin/suを読むとき、カーネルはディスクに行きません。代わりに、バイトを提供します。重要なことに、キャッシュは共有されています。ファイルを開くすべてのプロセスが同じメモリ内ページを指しています。ファイルのアクセス許可は、これらのページを変更できるかどうかを決定し、権限のないユーザーは通常変更できません。
2つのLinuxネットワーク機能 – IPsec暗号化(ESP)とニッチなファイル共有プロトコル(RxRPC) – は、受け取ったネットワークデータを所定の位置で復号化する最適化を使用しています。受け取ったネットワークデータを新しいバッファにコピーしてから復号化する代わりに、カーネルはそれが到着したメモリチャンク内で直接復号化します。
欠陥は、カーネルがそのメモリを実際に所有しているかどうかをチェックしないことです。つまり、攻撃者は、ペイロードメモリが密かに/usr/bin/suのキャッシュから借りられたページである偽のネットワークパケットをつなぎ合わせることができます。その後、彼らは自分のキーを使用してカーネルの復号化を構成することができるため、「復号化された出力」は彼らが完全に選択したバイトです。結果として、カーネルは借りられたページにこれらのバイトを従順に書き込み、これはシステム全体が共有するsuファイルのメモリ内コピーです。これで/usr/bin/suは、攻撃者のシェルコードを使用してRAMで静かに書き換えられます。次にsuを実行する人は、攻撃者のコードをrootとして実行します。
悪用
パブリックPoCは両方のプリミティブをチェーンしているため、ディストリビューション固有のハードニングを迂回できます。権限のないユーザー名前空間を許可するホストでは、ESP亜種が最初に実行されます。権限のないユーザー名前空間が制限されているUbuntu上では、rxrpc.koがデフォルトカーネルパッケージに含まれているため、RxRPC亜種が引き継ぎます。
ESP悪用は、以下の攻撃チェーンをほぼ従います:
- パイプを開き、
vmsplice()を使用して/usr/bin/suページキャッシュからのページをページフラグメントとして接続します。 - 攻撃者が選択した暗号、キー、およびSPIを使用してXFRM SAを
AF_KEYまたはXFRM netlink経由で構成します。 - パイプを
splice()でESPカプセル化用に構成されたUDPソケットに接続し、細工されたESPデータグラムをループバックに送信します。 - カーネルはスプライスされたページ全体のデータをその場で復号化し、192バイトのx86_64スタブ(
setuid(0);setgid(0);execve("/bin/sh"))を/usr/bin/suのキャッシュされたページに直接預けます。 /usr/bin/suを実行します。パッチされたバイナリが実行され、rootシェルを生成します。
前のDirtyPipe脆弱性CVE-2022-0847とは異なり、Dirty Fragはパイプバッファフラグ処理の狭いレースに依存していることもありますが、これは決定的なロジックの欠陥です。Kimは非常に高い成功率と最小限のカーネルパニックリスク、時間枠を失う必要がないことを報告しています。Copy Fail (CVE-2026-31431)の4バイト書き込み粒度は、ここではシングルショット形式で選択した任意のオフセットで完全に攻撃者が制御するプレーンテキストに置き換えられます。
影響
脆弱なカーネル上の権限のないローカルユーザーは、誰もがrootアクセスを取得できます。リモートベクトルはありません。悪用は標準syscall(socket、setsockopt、bind、vmsplice、splice、sendmsg)とモジュール(esp4、esp6、rxrpc)のみに依存しており、すべての主要なエンタープライズディストリビューションのデフォルトカーネルパッケージで完全に有効になっています。コンテナワークロードは、したがってホストカーネル露出を継承します。AF_KEY、XFRM netlink、またはAF_RXRPCソケットを作成できるコンテナの侵害(無制限のDocker、containerd、およびほとんどのKubernetesポッドのデフォルト)は、ホストrootにエスカレートします。
Sysdig Secureでの検出
マネージドポリシーを使用するSysdig Secureの顧客は、これらの脅威を検出するためのランタイム検出を備えています。まず、既存のCopyFailルールはDirty Fragのいくつかのバリアントを検出します:
- AF_ALGページキャッシュ中毒による権限昇格
- AF_ALGページキャッシュ中毒が機密ファイルを標的にしている
Dirty Fragの残りのバリアントについて、ESPおよびRxRPCパスをカバーする2つの新しいルールがSysdig Runtime Behavioral Analyticsポリシーに追加されました:
- Dirty Frag xfrm-ESP Page Cache Poisoning LPE
- Dirty Frag RxRPC Page Cache Poisoning LPE
両方のルールは、Sysdigの高度な検出エンジンを使用してイベント間でシグナルをリンクし、その場の書き込みが着地する前にセットアップフェーズをキャッチします。
Falcoでの検出
Dirty Fragの RxRPCパスでは、このソケットがrxrpc.koを自動ロードし、add_key()を介してrxkadセッションキーを登録する必要があります。これは、ページキャッシュへのスプライス書き込みプリミティブを取得するための前提条件です。AF_RXRPCは、AFSファイルシステムデーモン外にユーザー空間消費者を正当に持たないため、ソケットコール自体は信頼できる早期インジケーターです。
- rule: AF_RXRPC Socket Created by Unexpected Process
desc: >
Detects creation of an AF_RXRPC (RxRPC protocol, domain 33) socket by a process that is not a known AFS client or server daemon. AF_RXRPC sockets are used by the Dirty Frag RxRPC userspace-fcrypt exploit path: an attacker opens socket(AF_RXRPC, SOCK_DGRAM) and calls add_key("rxrpc") to register a kernel rxkad key, obtaining a splice write primitive into a page-cache fragment.
condition: >
evt.type=socket and evt.dir=< and evt.rawres >= 0 and
(evt.rawarg.domain=33 or evt.arg.domain contains AF_RXRPC) and
proc_name_exists and
not proc.name in (af_rxrpc_trusted_processes)
output: AF_RXRPC socket created by unexpected process (proc.name=%proc.name proc.exepath=%proc.exepath proc.pname=%proc.pname proc.pexepath=%proc.pexepath gparent=%proc.aname[2] gexepath=%proc.aexepath[2] ggparent=%proc.aname[3] ggexepath=%proc.aexepath[3] proc.cmdline=%proc.cmdline proc.pcmdline=%proc.pcmdline socket.domain=%evt.arg.domain socket.type=%evt.arg.type proc.pid=%proc.pid proc.exe=%proc.exe)
推奨事項
- 更新して、パッチ済みカーネルバージョンに更新します。
- 緩和措置IPsecトランスポートモードまたはAFSを必要としないホストで、脆弱なモジュールのロードを防ぐことにより、直ちに実施します。AWSの2026-027ブレティンは、元々開示された3つを超えて、周囲の
xfrm_user、ipcomp4、およびipcomp6モジュールを含むリストを拡張しています。(注: これは、カーネルに機能がコンパイルされている場合は有効ではありません。) - 制限seccompプロファイル経由のコンテナランタイムで
AF_KEY、AF_RXRPC、およびXFRM netlinksyscallを実施します。デフォルトのDocker seccompプロファイルは既にAF_RXRPCをブロックしていますが、AF_KEYまたはXFRM netlink構成ではありません。 - 展開上記のFalcoルールを展開して、ホストとコンテナ全体でこれらのソケットファミリとネットリンクプロトコルの権限のない使用にフラグを立てます。
- 監査正当なIPsecおよびAFSユーザーを実行中のワークロードを監査し、検出の例外が無効になるのではなく既知のバイナリにスコープされます。
- 監視
setuidバイナリと/etc/passwdへの予期しない変更について、および権限のないプロセスからのスプライスおよびvmspliceアクティビティに続く予期しない権限遷移について。
結論
Dirty Fragは、8日間でCopyFailのalgif_aeadページキャッシュ書き込み欠陥に続く、2番目のユニバーサルLinux LPE脆弱性です。両方とも、長寿命のその場での処理の最適化を決定的なrootプリミティブに変えます: 1つはユーザー空間暗号化で、もう1つはIPsec受信です。パッチの前にリリースされた動作するパブリックPoCと、悪用が少数の標準syscallに削減されたことで、ディフェンダーは、パッチなしホストへのローカルフットホールが数秒以内にrootになる可能性があると想定する必要があります。
カーネルが更新されるまで、脆弱なモジュールをブラックリストに登録し、権限のないAF_KEY、AF_RXRPC、およびXFRMアクティビティのランタイム検出を展開することが、唯一の実用的な補償控除です。ページキャッシュ書き込みクラスは、Dirty Pipeが行われたのと同じ方法で扱われるべきです。リカリング パターンであり、ワンオフバグではありません。
クラウド検出と対応


