# 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 Fail | Dirty Frag | |
|---|---|---|
| 発見者 | Xint Code (Theori 社の AI 脆弱性スキャナ) | Hyunwoo Kim 氏 (@v4bel、個人研究者) |
| 公開日 | 2026-04-29 | 2026-05-07 |
| CVE | CVE-2026-31431 | 未付与 (embargo 破綻のため) |
| 攻撃経路 | algif_aead | xfrm-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