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年間気づけなかった穴が複数空いていたことだ。
| 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 |
| レース 条件 |
不要 | 不要 | 不要 |
| パッチ 状況 |
メイン ライン 取込済 |
メイン ライン 取込済 |
メイン ライン 未到達 |
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まで進んだ。
|
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クラスは、おそらくまた誰かが見つける。
修正の連鎖が、まだしばらく続く。
参照元
- oss-security - Linux kernel LPE ("fragnesia", copyfail 3.0)
- lore.kernel.org - [PATCH net] net: skbuff: preserve shared-frag marker during coalescing