Fragnesia公開、Linux LPE 2週で3件目

Fragnesia公開、Linux LPE 2週で3件目

Dirty Fragのパッチが月曜に取り込まれた、その2日後だ。同じESP/XFRMで別の穴が見つかった。


2週間で3件目の根こそぎ脱出口

Linuxカーネルに、ローカル権限昇格(LPE)の脆弱性「Fragnesia」(CVE-2026-46300)が公開された。発見したのはセキュリティ研究者のウィリアム・ボウリング(William Bowling)率いるV12チーム。一般ユーザーがroot権限を奪取できる。

2026年4月29日にCopy Fail(CVE-2026-31431)、5月7日にDirty Frag(CVE-2026-43284、CVE-2026-43500)、そして本日5月13日にFragnesia。2週間で3件目のLinuxカーネルLPEだ。

しかも全て「ページキャッシュへの不正書き込み」、同じバグクラスに属する。Dirty Pipeの系譜である。

Fragnesia is a member of the Dirty Frag vulnerability class. This is a separate bug in the ESP/XFRM from dirtyfrag which has received its own patch. (FragnesiaはDirty Frag脆弱性クラスのメンバー。Dirty Fragとは別のバグで、独自のパッチが当てられている)

ESPとXFRMは、Linuxカーネルのネットワークスタックの中でも、IPsec(暗号化通信)を扱う領域だ。一般のデスクトップユーザーには馴染みが薄いが、サーバーやコンテナ環境では当たり前に動いている。問題はそこに、人類が9年間気づけなかった穴が複数空いていたことだ。

2週間で連続発生した3件のLinuxカーネルLPE
Copy Fail Dirty Frag Fragnesia
CVE CVE-2026-
31431
CVE-2026-
43284 /
43500
CVE-2026-
46300
公開日 2026年
4月29日
2026年
5月7日
2026年
5月13日
発見者 ヒョンウ・
キム
ヒョンウ・
キム
ウィリアム・
ボウリング
(V12)
攻撃面 algif_aead ESP /
RxRPC
ESP-in-TCP
レース
条件
不要 不要 不要
パッチ
状況
メイン
ライン
取込済
メイン
ライン
取込済
メイン
ライン
未到達
※ 3件とも「ページキャッシュへの不正書き込み」という同じバグクラスに属する。緩和策はesp4、esp6、rxrpcモジュールのブラックリスト化で、Dirty Frag対策がFragnesiaにもそのまま機能する。

TCPソケットがESPに化ける瞬間

Fragnesiaの仕掛けは、ESP-in-TCPというサブシステムのロジックバグにある。

通常、ESPは暗号化されたパケットを処理するための機構だ。だがTCPソケットがespintcp ULP(上位層プロトコル)モードに遷移するとき、奇妙なことが起きる。攻撃者があらかじめ splice() でファイルのデータをreceive queueに流し込んでおくと、カーネルはそのファイルページを「ESP暗号文」として処理しはじめる。

ファイルが、いきなり暗号文に見えてしまう。

そしてAES-GCMのキーストリームバイトが、カウンタブロック位置2のバイト0で、キャッシュされたファイルページに直接XORされる。IVノンスを攻撃者が選べるので、任意のターゲットバイトを任意の値に書き換えられる。1回の発動で1バイトだが、256エントリのルックアップテーブルを構築すれば、splice/ULPレースを繰り返すだけで好きなだけ書き換えられる。

ボウリングが公開したPoCは、これを使って /usr/bin/su のページキャッシュに192バイトの位置非依存ELFスタブを書き込む。次に /usr/bin/su を実行した瞬間、改ざんされたsuがrootシェルを生成する。

ディスク上の /usr/bin/su バイナリは無傷だ。書き換えはページキャッシュにのみ存在する。再起動すれば消える。だがそれまでの間、システムは完全に陥落している。

「copyfail 3.0」というニックネームは、ボウリング自身がメーリングリストの件名に付けた。Copy Fail、Dirty Frag、そしてFragnesia。同じバグクラスのバージョン番号が、わずか2週間で3まで進んだ。

Fragnesiaの攻撃フロー (root取得まで6ステップ)
1
splice()で/usr/bin/suのページをTCP受信キューに流し込む
2
TCPソケットをespintcp ULPモードに遷移させる
3
カーネルが受信キューのファイルページをESP暗号文と誤認
4
AES-GCMキーストリームがページキャッシュに直接XORされる
5
IVノンスを選択しキャッシュ上のsuバイナリ先頭192バイトを書き換え
6
suを実行 → 改ざんされたELFスタブがrootシェルを生成
※ ディスク上の/usr/bin/suは無傷で、改ざんはページキャッシュ上にのみ存在する。再起動またはpage cacheクリアで消失するが、それまでの間システムは陥落状態に置かれる。

レース条件不要、決定論的に動く

このクラスの脆弱性で最も恐ろしいのは、レースコンディションが要らないことだ。

Dirty Pipeの時代、ページキャッシュ書き換え系の攻撃は「タイミング次第」だった。攻撃が失敗すればカーネルがパニックを起こすこともあり、PoCを動かすには複数回の試行が必要だった。

Fragnesiaにはそれがない。決定論的なロジックバグだから、攻撃は一発で通る。カーネルがクラッシュするリスクも低い。一般ユーザーが、何の特殊な条件もなしに、確実にrootを取れる。

It abuses a logic bug in the Linux XFRM ESP-in-TCP subsystem to achieve arbitrary byte writes into the kernel page cache of read-only files, without requiring any race condition. (Linux XFRM ESP-in-TCPサブシステムのロジックバグを悪用し、レースコンディションを必要とせずに読み取り専用ファイルのカーネルページキャッシュへの任意バイト書き込みを実現する)

V12チームが確認したのはUbuntuの 6.8.0-111-generic カーネル。だが影響範囲はそれよりはるかに広い。Dirty Fragの影響を受けるカーネル全てが、つまり2017年以降のほぼ全てのLinuxカーネルが、Fragnesiaにも脆弱だ。

espintcp ULPはIPsec ESP-in-TCPカプセル化の入口で、IPsecをTCP上で通すための機構。ESP/XFRMはLinuxの暗号化通信スタックの中核で、サーバー・コンテナ環境では標準的に有効化されている。一般ユーザー権限から到達可能なため、攻撃面として致命的だ。

パッチはわずか2行、しかしまだメインラインに無い

ボウリングがnetdevメーリングリストに投稿したパッチ(net: skbuff: preserve shared-frag marker during coalescing)は、追加コードがわずか2行だ。skb_try_coalesce() がpaged fragsをアタッチする際、SKBFL_SHARED_FRAG フラグを引き継がせるだけの修正である。

if (from_shinfo->nr_frags)
    to_shinfo->flags |= from_shinfo->flags & SKBFL_SHARED_FRAG;

なぜこの2行が必要だったのか。ESPの入力チェックは skb_has_shared_frag() を見て、skb_cow_data() をスキップするか判断する。だがTCPのreceive coalescingがshared fragsを未マーキングのskbに移動させると、ESPは「これは共有されていない」と誤認し、page-cache backed fragsの上でin-place復号を始めてしまう。フラグの引き継ぎ漏れだけで攻撃面が開く。

このパッチは執筆時点でまだメインラインに取り込まれていない。安定版カーネルにも降りていない。


Dirty Fragパッチの「副産物」という見方

Fragnesiaの公開タイミングが象徴的だ。

Dirty Fragのパッチ(f4c50a4034e6 および aa54b1d27fe0)がメインラインに取り込まれたのは月曜、5月11日。その48時間後にFragnesiaが公開された。

Dirty Frag発見者のヒョンウ・キム(Hyunwoo Kim)は、こう指摘している。

Fragnesiaは、元のDirty Fragを修正するパッチの一つの意図しない副作用として現れた。

修正自体が新しい攻撃面を露呈させた、ということになる。

攻撃面が完全に重なっており、緩和策も同じだ。esp4、esp6、rxrpcモジュールをブラックリスト化するDirty Frag対策が、そのままFragnesia対策になる。

printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
  > /etc/modprobe.d/fragnesia.conf

ESP/XFRMの狭い領域に、2週間で複数のLPEが続けて出てきた事実は重い。これはたまたまではなく、この領域がそもそも長期間レビュー不在だったことの証拠だ。Copy Failの時点で誰もが心配していた「他にもまだあるのでは」という不安が、立て続けに現実になっている。

そしてFragnesiaの発見者であるV12チームは、AIエージェント型のセキュリティ監査ツール「V12」を開発する企業でもある。AIによる脆弱性発見が、人間の見落とした穴を次々と掘り当てている。次のFragnesiaクラスは、おそらくまた誰かが見つける。

修正の連鎖が、まだしばらく続く。


参照元

関連記事

この記事を共有する