🔥 Linuxにおけるローカル権限昇格の脆弱性「Dirty Frag」について - 編集者ピックアップ
2026-05-09 更新
Linuxにおけるローカル権限昇格の脆弱性「Dirty Frag」について
2026-05-08・元記事
💬編集者の視点

# Dirty Frag: Copy Fail の緩和では足りない

Editor's Pick: Dirty Frag (CVE pending)

---

Q1: 何が起きたか

Copy Fail (CVE-2026-31431) を着想元に、別の研究者 Hyunwoo Kim 氏が発見した第2弾の Linux LPE。名前は Dirty Frag。一般ユーザーが root を取れる。対象は 2017年以降の主要 Linux ディストリビューション全般。パッチは現時点で存在しない

PoC は GitHub に公開済みで、今すぐ動く。

Copy FailDirty Frag
発見者Xint Code (Theori 社の AI 脆弱性スキャナ)Hyunwoo Kim 氏 (@v4bel、個人研究者)
公開日2026-04-292026-05-07
CVECVE-2026-31431未付与 (embargo 破綻のため)
攻撃経路algif_aeadxfrm-ESP / RxRPC (2経路チェーン)
パッチ主要ディストロで配布済み未提供 (ESP のみ kernel mainline マージ)
関係Copy Fail と同じ書き込み先 (sink) を別経路で突く

Q2: Copy Fail と何が違うのか

Copy Fail 対策として多くの組織が実施したのはこれ:

echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf

これは Dirty Frag に効かない。

Dirty Frag は algif_aead を使わない。攻撃経路が 2つあり、どちらも別のカーネルサブシステムを使う。Copy Fail 緩和済み = Dirty Frag 対策済み、にはならない。

Q3: 今すぐできる緩和策

sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"

注意点:

esp4 / esp6 は IPSec VPN の kernel モジュール。無効化すると IPSec ESP モードの VPN が使えなくなる。一般的なサーバーには影響なし。IPSec VPN ゲートウェイを運用している場合は確認してから適用すること。

rxrpc は AFS ファイルシステム用。ほぼ全環境で無効化しても影響なし。

Q4: 対応の優先順位

1. esp4/esp6/rxrpc の blacklist を今すぐ適用する
2. IPSec VPN を使っている環境は先に確認する
3. Copy Fail 緩和 (algif_aead) とは別対応であることを社内に周知する
4. ディストリビューションの security advisory をモニタリングする
(kernel patch は ESP 向けがマージ済み、Ubuntu 等のパッケージ更新を待つ)

---

技術詳細 (以下は読み飛ばしてOK)

### なぜ 2017年以降のほぼ全環境で動くのか

Copy Fail も Dirty Frag も、根本的な攻撃手法は同じ。splice() を使って読み取り専用のページキャッシュページ (/etc/passwd/usr/bin/su 等) を sk_buff の frag に植え込み、カーネルがそのページ上でインプレース暗号処理を実行する瞬間に任意の値を書き込む。書き込みは認証失敗後も RAM 上に永続する。

Dirty Frag の攻撃経路は 2つ:

経路1: xfrm-ESP (esp4/esp6)

esp_input() の条件分岐が、非線形 skb でも frag_list がなければ skb_cow_data() をスキップするバグ。攻撃者は SA 登録時に指定した 4バイトの値を /usr/bin/su の任意オフセットに書き込める。これを 48回繰り返し、192バイトの root シェル ELF を組み立てる。

ただし XFRM SA 登録に CAP_NET_ADMIN が必要なため、ユーザー名前空間 (unshare(CLONE_NEWUSER)) 内で実行する。Ubuntu が AppArmor でユーザー名前空間をブロックしている場合この経路は使えない。

経路2: RxRPC

rxkad_verify_packet_1() のインプレース復号が、splice で植えたページにそのまま走るバグ。unshare() 不要で非特権ユーザーが直接実行可能。ただし rxrpc.ko が必要で、Ubuntu 等の一部ディストリビューションにしかデフォルトで入っていない。

チェーン実行の設計

1. 経路1 (ESP) を試みる
2. 失敗 (AppArmor によるユーザー名前空間ブロック等) → 経路2 (RxRPC) にフォールバック

経路1が Ubuntu の AppArmor に阻まれると経路2が動く。経路2が他のディストリビューションで rxrpc.ko がなくて動かないと経路1が動く。この補完構造により、1つのバイナリが主要ディストリビューションの大半で動作する。

### Embargo が破れた経緯

- 4/29: rxrpc 脆弱性を [email protected] に報告
- 4/30: ESP 脆弱性を [email protected] に報告
- 5/7: ESP の patch が netdev tree にマージ完了
- 5/7: linux-distros ML に通知、5日間 embargo を設定
- 5/7: 無関係な第三者が exploit を公開 → embargo 破綻 → 全文公開

ESP 向け kernel patch はマージ済み (f4c50a4034e62a)。RxRPC 向けは投稿済みだがマージ未確認。ディストリビューション向けのパッケージ更新はさらに遅延する可能性がある。

### ソース

- PoC + README: https://github.com/V4bel/dirtyfrag
- Write-up: https://github.com/V4bel/dirtyfrag/blob/master/assets/write-up.md
- ESP patch: https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4
- Tom's Hardware: https://www.tomshardware.com/tech-industry/cyber-security/dirty-frag-exploit-gets-root-on-most-linux-machines-since-2017-no-patches-available-no-warning-given-copy-fail-like-vulnerability-had-its-embargo-broken

Linux KernelUbuntuRHELopenSUSECentOS StreamAlmaLinuxFedora