2026年5月7日、研究者Hyunwoo Kimが「Dirty Frag」と名付けたLinuxカーネルのローカル特権昇格(LPE)脆弱性を公開した。CVE-2026-43284(IPsec ESP)とCVE-2026-43500(RxRPC)という2つのページキャッシュ書き込みバグをチェーンし、非特権ユーザーが1コマンドでroot権限を取得できる。Dirty PipeやCopy Failと同じ脆弱性クラスに属するが、タイミング依存の競合を一切持たない決定論的なロジックバグとして設計されており、成功率が極めて高い点が特徴だ。エンブレゴ(embargo)が第三者によって破棄されたため、パッチが存在しない状態でPoC(概念実証コード)が公開されるという異例の経緯を辿った。

影響を受ける環境
  • ・Ubuntu 24.04.4 / 22.04 LTS、RHEL 10.1、CentOS Stream 10、AlmaLinux 10、Fedora 44、openSUSE Tumbleweed
  • ・xfrm-ESP側は2017年以降(約9年間)、RxRPC側は2023年6月以降のすべてのLinuxカーネルが対象
  • ・パッチは2026年5月7日にespサイドがnetdevツリーにマージ、rxrpc側はまだ未公開の段階
  • ・即時ミティゲーション:esp4・esp6・rxrpcカーネルモジュールをblacklistに登録して無効化

Linuxカーネルセキュリティ全般の攻撃手法と防御フレームワークを体系的に理解したい場合は、サプライチェーンセキュリティ2026|攻撃手法・防御ツール・実践チェックリストも合わせて参照してほしい。

Dirty Fragとは—Linuxカーネル全ディストリに影響する特権昇格脆弱性の概要

Dirty Fragという名称は、Linuxカーネルのネットワーク層が管理するソケットバッファ(sk_buff)の「frag」メンバに由来する。Dirty Pipe(2022年)やCopy Fail(CVE-2026-31431)と同様、読み取り専用のページキャッシュに対して非特権ユーザーが書き込みを行えてしまうという脆弱性クラスの延長線上に位置する。

Dirty Fragを一言で表すと
IPsec ESPとRxRPCの受信パスに存在するコピーオンライト漏れを悪用し、ゼロコピー転送(splice/sendfile)で固定されたページキャッシュページをカーネルが直接書き換えてしまうロジックバグ。非特権ユーザーが読み取れる任意のファイルのメモリ上の内容を改ざんでき、/usr/bin/suや/etc/passwdを上書きすることでroot権限を奪取できる。

Hyunwoo Kimはこの脆弱性について「タイミングウィンドウに依存しない決定論的なロジックバグであり、失敗してもカーネルパニックを引き起こさない」と説明している。従来の競合状態(race condition)を利用するLPEとは根本的に性質が異なり、成功率が事実上100%に近い点が防御側にとって特に深刻だ。

発見の背景として、Hyunwoo Kimは同系統のバグ「Copy Fail」の研究を通じてページキャッシュ書き込みという脆弱性クラスを深く理解し、同様の不備がESPとRxRPCにも存在することを突き止めた。研究者自身がPublic Disclosureの文書内で「Copy Failとの関係」を明示しており、同一ルートコーズに基づく異なる経路の発現と位置付けられる。

GitHubリポジトリ V4bel/dirtyfrag は2026年5月8日時点で★2,080・Fork 323を記録しており、セキュリティコミュニティの注目度の高さを示している。リポジトリにはポイントリリースごとの動作確認済みカーネルバージョンと、モジュールブラックリストによる即時ミティゲーションスクリプトが含まれている。

ページキャッシュとsk_buffフラグメント—脆弱性が生まれる技術的背景

Dirty Fragを理解するには、LinuxカーネルにおけるページキャッシュゼロコピーI/Oの仕組みを把握する必要がある。

Linuxページキャッシュの基本構造

Linuxカーネルはディスクから読み込んだファイルデータをメモリ上のページキャッシュ(Page Cache)に保持し、複数プロセスから共有参照できるようにする。/etc/passwd/usr/bin/suなどのシステムファイルは、読み取り専用であっても常にページキャッシュを通じてアクセスされる。

通常の書き込み操作では、カーネルはコピーオンライト(COW: Copy-on-Write)の原則に従い、共有ページへの変更前に必ずプライベートコピーを作成する。この仕組みにより、あるプロセスがファイル内容を変更しても他プロセスへの影響を防いでいる。

ゼロコピーI/Oとsplice

splice(2)sendfile(2)MSG_SPLICE_PAGESフラグを使うと、ユーザー空間を経由せずにカーネル内でデータを転送できる(ゼロコピー転送)。この仕組みでは、送信側がページキャッシュページへの参照(pinned reference)をsk_buffのfragスロットに直接渡す。送信側プロセスが依然としてそのページへの参照を保持したまま、ページがネットワークスタックに渡される。

sk_buffのfragスロットと問題の核心

Linuxカーネルのsk_buff(ソケットバッファ)構造体は、分散・収集I/O用に複数の「フラグメント(frag)」を保持できる。送信側がspliceでページキャッシュページをsk_buffのfragスロットに連結した場合、そのページはカーネルが「所有」しているわけでなく、ユーザープロセスが依然として参照権を持つ外部バックドページとなる。

graph TD A["非特権ユーザープロセス"] -- "spliceでページキャッシュ参照を植え付け" --> B["sk_buff fragスロット"] B --> C{"受信パスでのCOWチェック"} C -- "正常: COWチェック通過" --> D["プライベートコピーへ書き込み
ページキャッシュ保護"] C -- "脆弱: COWチェック漏れ" --> E["ページキャッシュに直接書き込み
読み取り専用ページが汚染"] E --> F["usr/bin/su や etc/passwd が改ざん"] F --> G["非特権ユーザーがroot権限取得"] style E fill:#ff6b6b,color:#fff style F fill:#ff6b6b,color:#fff style G fill:#ff6b6b,color:#fff style D fill:#51cf66,color:#fff

Dirty Fragの核心は、ESP(IPsec暗号化)やRxRPC(Kerberosベース認証プロトコル)の受信パスが、このfragスロット内の外部バックドページに対して直接インプレース復号を行ってしまう点にある。通常はskb_cow_data()という関数がCOWチェックを行いプライベートコピーを作成するはずだが、特定の条件下でこのチェックが完全にスキップされる。

2つのCVEチェーンの仕組み—ESP4/ESP6とRxRPCの動作原理

Dirty Fragは2つの独立したCVEを使い分けることで、主要なLinuxディストリビューションを網羅する設計になっている。どちらも「ページキャッシュへの不正書き込み」という原始的能力(プリミティブ)を提供するが、必要な権限と依存モジュールが異なる。

CVE-2026-43284:xfrm-ESP Page-Cache Write

xfrm(IPsec変換)フレームワークのesp4esp6モジュールに存在する脆弱性だ。ESPの受信パスで非線形sk_buff(paged fragを含むもの)に対してインプレース復号を行う際、skb_cow_data()のCOWチェックが特定の条件下でバイパスされる。その結果、攻撃者が制御するfragページ上に直接復号結果が書き込まれる。

この経路を使うには名前空間(namespace)作成権限が必要だが、多くのディストリビューションではデフォルトで非特権ユーザーが名前空間を作成できるよう設定されている。ただし、AppArmor等で厳格に制限しているディストリビューションでは単独では利用できない。

脆弱性コミット: cac2661c53f3(2017年1月17日)以降のすべてのカーネル
パッチコミット: f4c50a4034e6(SKBFL_SHARED_FRAGフラグによる共有frag検出)

CVE-2026-43500:RxRPC Page-Cache Write

RxRPCサブシステムのrxkad_verify_packet_1()関数に存在する脆弱性だ。Kerberosベースの認証プロトコルRxRPCの検証パスで、pcbc(fcrypt)アルゴリズムによる8バイトのインプレース復号がsplice固定ページに直接適用される。

この経路は名前空間作成権限を必要としない点が大きな特徴だ。ただしrxrpc.koモジュールがロードされている必要があり、主にUbuntuで標準搭載されている(多くのRHEL系ディストリはデフォルトでrxrpcを持たない)。

脆弱性コミット: 2dc334f1a63a(2023年6月)以降のカーネル
パッチ: 公開時点では未提供

チェーン戦略:2つの経路で全ディストリをカバー

なぜ2つの脆弱性を組み合わせるのか
xfrm-ESPはRHEL・Fedora・openSUSEなど名前空間が使えるほぼすべての環境で動作するが、AppArmor制限が厳しいUbuntuでは制約を受けることがある。RxRPCはUbuntuのrxrpc.koに依存するが名前空間権限不要。2つを組み合わせることで、主要ディストリビューションの実質的な全網羅を実現している。
経路 CVE 必要権限 依存モジュール 主な対象ディストリ
xfrm-ESP CVE-2026-43284 名前空間作成権限 esp4 / esp6 RHEL・Fedora・openSUSE・Ubuntu(AppArmor緩い場合)
RxRPC CVE-2026-43500 非特権ユーザーのみ rxrpc.ko Ubuntu系(rxrpc標準搭載)
組み合わせ 両CVE いずれかを選択 いずれか 主要全ディストリ

影響範囲—Linuxカーネルバージョンと確認済みディストリビューション

Dirty Fragの影響範囲は非常に広い。xfrm-ESP側は2017年から約9年にわたって潜在していたバグであり、RxRPC側は2023年6月以降の約3年間が対象となる。

確認済み影響ディストリビューション

ディストリビューション バージョン xfrm-ESP RxRPC 備考
Ubuntu 24.04.4 LTS 両経路とも実証済み
Ubuntu 22.04 LTS rxrpc標準搭載
RHEL 10.1 rxrpc非搭載
CentOS Stream 10 RHEL同等
AlmaLinux 10 RHEL互換
Fedora 44 最新カーネル搭載
openSUSE Tumbleweed 最新 ローリングリリース
Amazon Linux 2023 最新 要確認 AWSアドバイザリ参照
Debian 12 (Bookworm) 要確認 名前空間設定依存

クラウド環境への影響

AWS・GCP・Azureなどのクラウド環境でもLinuxベースのインスタンスはすべて影響を受ける可能性がある。特に多テナント環境(複数ユーザーが同一ホスト上で動く場合)では、ホストカーネルへのLPEがコンテナブレイクアウトに直結するリスクがある。

AWS公式のセキュリティアドバイザリ(AWS-2026-027)では、Amazon Linux 2023向けの対応状況と暫定ミティゲーション手順が公開されている。GCPとAzureも同様のアドバイザリを発行しており、マネージドKubernetesサービス(GKE・AKS・EKS)のコントロールプレーンへのパッチ適用は各クラウドプロバイダーが自動実施している。

Androidへの影響

AndroidはLinuxカーネルをベースとするが、Dirty Fragの主要な経路については以下の理由から標準的なAndroid端末での悪用は限定的だ。

・標準AOSPはrxrpc.koを含まないため、CVE-2026-43500の経路は適用されない。
・Androidのカーネルはネットワーク構成が一般的なサーバーLinuxと大きく異なり、IPsec ESPの利用形態も制限されている。
・ただし、カスタムカーネルを搭載したAndroid派生OS(カスタムROM等)や、ルート化されたデバイスでは影響を受ける可能性がある。

Googleは2026年5月のAndroidセキュリティ情報にてESP関連のカーネルパッチの適用計画を含めることを発表した。Pixelデバイスは2026年6月のセキュリティアップデートにてパッチが適用される見通しだ。

Dirty Pipeファミリーの系譜—Copy FailからDirty Fragへの変遷

Dirty Fragは2022年のDirty Pipe発見以来続く、Linuxカーネルの「ページキャッシュ書き込み」脆弱性クラスの最新版と言える。Hyunwoo Kim本人も公開文書内でこの系譜を明示している。

ページキャッシュ書き込みバグクラスの変遷

flowchart LR A["2022年
Dirty Pipe
CVE-2022-0847
pipe_buffer フラグ漏れ"] --> B["2026年4月
Copy Fail
CVE-2026-31431
authencesn and AF_ALG
4バイト任意書き込み"] B --> C["2026年5月
Dirty Frag
CVE-2026-43284 and 43500
ESP と RxRPC
2経路チェーン"] style A fill:#4a90d9,color:#fff style B fill:#e67e22,color:#fff style C fill:#c0392b,color:#fff

技術的な差異:3世代の比較

項目 Dirty Pipe(2022) Copy Fail(2026-04) Dirty Frag(2026-05)
悪用対象 pipe_buffer authencesn + AF_ALG sk_buff frag(ESP/RxRPC)
書き込みサイズ 任意 4バイト 4〜8バイト以上
タイミング依存 無(決定論的)
必要権限 非特権 非特権 非特権(経路依存)
影響ディストリ 全Linux 主要ディストリ 事実上全ディストリ
CVE CVE-2022-0847 CVE-2026-31431 CVE-2026-43284 / 43500
パッチ状況(発見時) 開示と同時 開示と同時 一部なし(embargo破棄)

Dirty Fragが過去2つのバグと最も異なる点は、「embargo破棄」という前代未聞の経緯でパッチ未適用のまま公開された点だ。通常のresponsible disclosureでは開示前にパッチが用意されるが、Dirty Fragでは第三者が独立して脆弱性を発見・公開したため、カーネル開発者がパッチを準備する前にPoCが出回ることになった。

Copy Fail(CVE-2026-31431)との関係については、当サイトの解説記事「Copy Fail(CVE-2026-31431)解説:Linuxカーネル脆弱性とEC2/ECS/EKSへの影響」で詳しく取り上げているので参照してほしい。

即時ミティゲーションと防御策—今すぐ実行できる対処法

Dirty Fragに対して現時点で取れる防御策は、脆弱なカーネルモジュールの無効化カーネルパッチの適用の2軸だ。

Step 1:脆弱モジュールのブラックリスト登録(即時適用可)

最も迅速に実施できるミティゲーションはモジュールのブラックリスト登録だ。以下の設定ファイルを作成し、再起動後にモジュールがロードされないようにする。

# /etc/modprobe.d/dirtyfrag.conf を作成
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
  | sudo tee /etc/modprobe.d/dirtyfrag.conf

既にモジュールがロード済みの場合は、以下で即時アンロードを試みる。

# 現在ロード済みかどうかを確認
lsmod | grep -E "^(esp4|esp6|rxrpc)"

# ロードされていた場合は除去(使用中プロセスがある場合は失敗することがある)
sudo rmmod esp4 esp6 rxrpc 2>/dev/null || true

# ページキャッシュのクリア(汚染済みの場合の後処理)
echo 3 | sudo tee /proc/sys/vm/drop_caches
注意事項
esp4・esp6モジュールはIPsec VPNの通信に使用される。業務でIPsec VPN(SiteToSite・RemoteAccess)を利用しているシステムでは、無効化前に代替手段またはパッチ適用タイミングを評価すること。rxrpcはAFS(Andrew File System)やKerberos認証が使われる環境に影響する可能性がある。

Step 2:モジュールのロード状況確認スクリプト

以下のスクリプトで、対象モジュールのロード状況を確認できる。インフラ自動化ツール(Ansible・Chef等)から実行してシステム全体の状況を把握するのに使える。

#!/bin/bash
# check_dirtyfrag.sh — Dirty Frag影響確認スクリプト(防御用)
echo "=== Dirty Frag (CVE-2026-43284/43500) モジュール確認 ==="
echo "カーネルバージョン: $(uname -r)"

for mod in esp4 esp6 rxrpc; do
  if lsmod | grep -q "^${mod}"; then
    echo "[警告] ${mod}: ロード済み — ブラックリスト登録を推奨"
  elif modinfo "${mod}" &>/dev/null; then
    echo "[注意] ${mod}: 利用可能(未ロード) — ブラックリスト登録を推奨"
  else
    echo "[OK]  ${mod}: システムに存在しない"
  fi
done

echo ""
echo "ブラックリスト設定の確認:"
cat /etc/modprobe.d/dirtyfrag.conf 2>/dev/null || echo "  ミティゲーション未適用"

Step 3:カーネルパッチの適用(正式対処)

xfrm-ESP側(CVE-2026-43284)のパッチは2026年5月7日にnetdevツリーにマージされた。修正の核心はSKBFL_SHARED_FRAGフラグの導入だ。splice固定のページキャッシュページを含むsk_buffにこのフラグをセットし、受信パスで確実にskb_cow_data()が呼ばれるようにする。

各ディストリビューションのパッチ対応状況(2026年5月8日現在):

ディストリ CVE-2026-43284(ESP) CVE-2026-43500(RxRPC) 確認コマンド
Ubuntu 24.04 パッチ準備中 未定 apt-get update && apt-get upgrade linux-image
RHEL 10.1 テスト中 N/A dnf update kernel
AlmaLinux 10 テスト中 N/A AlmaLinuxブログ参照
Fedora 44 対応中 N/A dnf update kernel
openSUSE 対応中 N/A zypper update kernel*
CloudLinux パッチ提供済み N/A CloudLinuxブログ参照

AppArmorによる補完的防御

Ubuntu環境では、AppArmorプロファイルで名前空間作成を制限することでxfrm-ESP経路の緩和策となる。ただしRxRPC経路には効果がないため、モジュールブラックリストと組み合わせることが重要だ。

# Ubuntu: ユーザー名前空間の制限設定(補完的対策)
# kernel.unprivileged_userns_clone=0 は副作用が大きいため慎重に適用すること
sysctl -n kernel.unprivileged_userns_clone

脆弱性管理の体系的なアプローチについては、Faraday徹底解説:6.5kスターの脆弱性管理プラットフォームOSS、80+セキュリティツール統合も参考になる。

開示経緯とエンブレゴ破棄—異例の公開プロセスが示すもの

Dirty Fragの公開プロセスは、脆弱性開示(Coordinated Vulnerability Disclosure)のあり方について重要な教訓を含んでいる。

タイムライン

2026年5月7日、Hyunwoo KimはLinuxセキュリティコミュニティのoss-securityメーリングリストに投稿し、完全なPoCとともにDirty Fragを公開した。公開に至った理由として「エンブレゴが第三者によって破棄された」ことを明示した。

エンブレゴ破棄とは
脆弱性の責任ある開示プロセスでは、発見者・影響を受けるベンダー・CERTなどが協調して「パッチ公開まで詳細を非公開にする」合意(エンブレゴ)を結ぶ。第三者が合意前に同じ脆弱性を独立発見・公開した場合、エンブレゴを維持する意味がなくなり、元の発見者も完全な情報を公開せざるを得なくなる。

エンブレゴ破棄によるパッチなし状態での公開は、防御側にとって対応時間が極端に短くなるという最悪のシナリオだ。通常のCoordinated Disclosureでは「公開 = パッチ利用可能」だが、Dirty Fragでは「公開 = PoC公開、かつパッチ未提供(一部)」という状態が生まれた。

セキュリティコミュニティの反応

Hacker Newsのスレッドでは、エンブレゴ破棄のリスクと独立発見の現実についての議論が活発に行われた。「研究者が独立発見した場合の開示義務とは何か」「パッチなし公開は許容されるか」という根本的な問いは、セキュリティ研究コミュニティが長く抱えてきた未解決課題だ。

防御側の組織としては、このような「パッチなし公開」が現実に起こり得ることを前提として、脆弱性インテリジェンス(oss-security・CERT・クラウドプロバイダーのアドバイザリ)を常時監視し、パッチ待ちの間もモジュール無効化等で素早く対応できる体制を整えておくことが重要だ。

Linuxカーネルの権限昇格バイナリの悪用経路については、GTFOBins:Linuxシステム管理者のための権限昇格・脱出ツール集が攻撃者の思考パターンを理解する上で参考になる。

組織が今すべきこと—多層防御チェックリスト

Dirty Fragへの対応は単なるカーネルアップデートにとどまらず、組織全体のセキュリティポスチャを点検するきっかけとして活用できる。

インフラチーム向け即時アクション

今すぐ実行できる3ステップ
  1. ・全Linuxサーバーでlsmod | grep -E "esp4|esp6|rxrpc"を実行してモジュールのロード状況を確認する。
  2. ・影響を受けるモジュールをブラックリストに登録して再起動を計画する(IPsec利用を事前確認すること)。
  3. ・ディストリビューションのセキュリティアドバイザリを購読設定し、カーネルパッチが出次第速やかに適用できる体制を整える。

コンテナ・クラウド環境

・ECS/EKS/GKE等のマネージドKubernetesでは、コントロールプレーンはクラウドプロバイダーがパッチ適用する。ノードグループ(EC2インスタンス等)は自己管理のため手動での対応が必要だ。
・コンテナ内からホストカーネルの脆弱性を悪用できるリスクがある。特に--privilegedコンテナやhostNetwork: true設定のPodは優先的に見直すこと。
・DockerのデフォルトseccompプロファイルはIPsec/RxRPC関連のシステムコールをブロックしないため、カスタムseccompプロファイルまたはモジュールブラックリストが必要だ。

セキュリティ運用チーム向けチェックリスト

カテゴリ 確認項目 優先度
資産管理 全Linuxシステムのカーネルバージョンとモジュール構成を把握しているか 緊急
パッチ管理 CVE-2026-43284のパッチが各ディストリのリポジトリに登録されたら即時適用できる体制があるか
暫定対策 esp4・esp6・rxrpcのブラックリスト設定を全システムに自動展開できるか 緊急
ログ監視 dmesgや/var/log/kernに異常なモジュールロード/アンロードの記録が残っているか確認したか
コンテナ ホストカーネルを共有するコンテナでのescapeリスクを評価したか
クラウド クラウドプロバイダーのアドバイザリを確認し、自社管理のノードに適用計画を立てたか
サードパーティ 使用しているOSSやフレームワークがLinuxカーネルモジュールを前提としていないか確認したか
インテリジェンス oss-securityリスト・CISA KEV・クラウドアドバイザリの購読設定をしているか

ソフトウェア開発者向けの注意点

アプリケーション開発者はカーネルパッチを直接コントロールできないが、以下の点でリスクを下げられる。

・コンテナビルドパイプラインにカーネルセキュリティスキャンを組み込む。
・本番環境のDockerイメージにはseccomp制限を適用する。
・LPE脆弱性の悪用可能性を下げるため、アプリケーションの実行権限を最小化する(非rootユーザーで実行、CAP_NET_ADMIN等の不要なCapabilityを削除する)。

まとめ

Dirty Frag(CVE-2026-43284/CVE-2026-43500)は、Linuxカーネルのページキャッシュ書き込みという脆弱性クラスが2026年においても深刻なリスクであることを改めて示した。Dirty Pipe(2022年)から続く系譜の最新版として、2つのCVEをチェーンして主要ディストリビューション全域をカバーする設計と、タイミング依存なしの決定論的な動作が特徴だ。

防御側が押さえるべき3つのポイント
  1. 即時ミティゲーション:esp4・esp6・rxrpcをblacklistに登録。IPsec利用環境は業務影響を先に確認すること。
  2. パッチ管理の自動化:ディストリビューションのセキュリティアドバイザリを購読し、カーネルパッチを最速で展開できる体制を整える。
  3. 多層防御:コンテナのseccomp・AppArmor・最小権限設計を組み合わせ、カーネル脆弱性が即ホスト侵害に直結しないアーキテクチャを作る。

エンブレゴ破棄という前代未聞の事態は、脆弱性インテリジェンスを受動的に待つだけでなくoss-securityやCISA KEVを積極的に監視し、パッチなし状態でも迅速に緩和策を取れる運用体制の重要性を改めて浮き彫りにした。

参照ソース