Bad Epoll (CVE-2026-46242)
(github.com/J-jaeyoung)- Linux カーネルの
epollサブシステムにおける競合状態 UAF脆弱性で、非特権プロセスが Linux デスクトップ・サーバーだけでなく Android デバイスでも root 権限を取得できる可能性がある - この脆弱性は Jaeyoung Chung が Google kernelCTF に 0-day として提出し、報告・エクスプロイトしたもので、kernelCTF は Linux カーネルエクスプロイトに $71,337+ の報奨金を提供している
- Anthropic の AI Mythos は同じ
epollコード内の別の競合状態バグである CVE-2026-43074 を発見したが、Bad Epoll は見逃した epollは OS、ネットワークサービス、ブラウザが依存するコアカーネル機能であるため無効化できず、単純な回避策はなくパッチ適用だけが解決策である- 脆弱性は 2023-04-08 のコミット
58c9b016e128で導入され、2026-04-24 のコミットa6dc643c6931で修正された。v6.4 以降ベースのカーネルのうち、修正バックポートがないディストリビューションは影響を受ける可能性がある
Bad Epoll の性質と深刻度
- Bad Epoll は Linux カーネル
epollサブシステムの競合状態による use-after-free(UAF) 脆弱性で、識別子は CVE-2026-46242 - 非特権プロセスが root 権限を取得でき、Linux デスクトップ・サーバーだけでなく Android デバイス にも影響しうる
- Google kernelCTF に 0-day として提出され、Jaeyoung Chung が報告とエクスプロイトを行った
- kernelCTF は Linux カーネルエクスプロイトに $71,337+ の報奨金を提供している
なぜ危険なのか
- Android root の可能性がある、まれな Linux 権限昇格バグである
- 多くの Linux 権限昇格脆弱性は Android がロードしないモジュールを必要とするため、Android root にはつながらない
- Google kernelCTF でエクスプロイトされた約 130 件の脆弱性のうち、Android root の候補は約 10 件で、Bad Epoll はそのひとつ
- Chrome の renderer sandbox 内からでもトリガーできる
- このサンドボックスは、ほぼすべての他のカーネルバグを防ぐ
- renderer エクスプロイトと Bad Epoll を連鎖させることで、Project Zero が
MSG_OOBで示した事例のようなカーネルコード実行の影響に至りうる
epollには kill-switch がない- Copy Fail 系は脆弱なモジュールをアンロードして無力化できる
epollは OS、ネットワークサービス、ブラウザが依存するコア機能のため無効化できない- 解決策はパッチ適用のみ
- 競合ウィンドウは約 6命令 と極めて小さい
- 通常の試行ではほとんど当たらない
- エクスプロイトは競合ウィンドウを広げ、カーネルをクラッシュさせない再試行ループを実行する
- その結果、kernelCTF 対象で 99% 程度の信頼性を示す
Mythos が見逃したバグ
- 2023 年の単一コミット
58c9b016e128により、約 2,500 行規模のepollコードに 2 つの別個の競合状態が導入された - Anthropic の Mythos はそのうち 1 つを見つけ、CVE-2026-43074 として報告した
- この結果は、カーネルの競合状態バグ検出が難しいことを示す意味のある事例である
- その後、独立研究者がこの脆弱性の 1-day エクスプロイトを kernelCTF に提出した
- もう 1 つの競合状態が Bad Epoll であり、Mythos はこれを見逃した
- Mythos は同じ小さな
epollコードパスで最初のバグを見つけていたため、同じ領域を意味のある形で調査していた可能性がある - Bad Epoll を見逃した正確な理由は不明
- Mythos は同じ小さな
- Bad Epoll の検出が難しかった可能性がある要因
- 競合ウィンドウが約 6 命令しかなく、脆弱なコードだけを見て正確なスレッドインターリービングを想像するのが難しい
- CVE-2026-43074 の修正後は、Bad Epoll の UAF は通常 KASAN をトリガーしない
- KASAN シグナルがなければ、Mythos が実際のバグとして報告する十分な確信を持てなかった可能性がある
- 修正も容易ではなかった
- メンテナの最初のパッチは問題を完全には修正できなかった
- 正しいパッチが mainline に入ったのは最初の報告から 2 か月 後だった
攻撃フロー
- 2 つの
epollclose パスが同時に実行されて競合する- 一方のパスがオブジェクトを解放している間に、もう一方のパスがそのオブジェクトへ書き込み続けることで UAF が発生する
- エクスプロイトは 4 つの
epollオブジェクトを 2 組に構成する- 1 組は競合状態をトリガーする
- もう 1 組は被害オブジェクトになる
- その後、8 バイトの UAF write を file オブジェクト UAF に変換する
- cross-cache 攻撃により file 内容全体を制御する
- 制御権を得た後、
/proc/self/fdinfoを通じて任意のカーネルメモリ読み取りを確保する - 最終段階で制御フローをハイジャックし、ROP チェーンを実行して root shell を得る
- 詳細技術資料
緩和策と影響バージョン
epollは無効化できないため、簡単な回避策はない- 解決策は upstream コミット
a6dc643c6931またはディストリビューションのバックポートを適用すること - 脆弱性の導入と修正の時点
- 導入: [
58c9b016e128], 2023-04-08 - 修正: [
a6dc643c6931], 2026-04-24
- 導入: [
- v6.4 以降ベースのカーネルを使い、修正バックポートをまだ適用していない Linux ディストリビューションは影響を受ける可能性がある
- v6.1 ベースの古いカーネルは、この脆弱性が v6.4 で導入されたため影響を受けない
エクスプロイト対象と Android の状況
- 現在のエクスプロイトは Google kernelCTF 対象向けに作成されている
lts-6.12.67(LTS): 99% reliablecos-121-18867.294.100(COS): 98% reliable
- Android 向けエクスプロイトはまだ進行中
- Pixel 10, kernel v6.6+: 現在の PoC は UAF をトリガーしており、完全な root エクスプロイトを進めている段階
- Android 向けエクスプロイトと writeup は完成後に公開予定
- Pixel 8 および他の v6.1 ベースのデバイスは、この脆弱性が v6.4 で導入されたため影響を受けない
タイムライン
- 2023-04-08: コミット
58c9b016e128によりepollにバグが導入される - 2026-02-17: security@kernel.org にバグを報告
- 2026-02-17: メンテナがパッチ試作版を提案したが、正しい修正ではなく議論が停止
- 2026-04-02: Mythos が発見した CVE-2026-43074 の修正が mainline に入る
- 2026-04-22: 残っていた問題を再報告
- 2026-04-24: Bad Epoll 修正コミット
a6dc643c6931が mainline に入る
名前と参考資料
- Bad Epoll という名前は、Android root 可能なカーネルバグの「Bad」シリーズに従っている
- 過去の例として Bad Binder、Bad IO_uring、Bad Spin がある
- このページは短縮版で、完全な root-cause 分析、エクスプロイト文書、コードは別リンクで提供されている
1件のコメント
Lobste.rs のコメント
この脆弱性が Chrome サンドボックスから到達可能だというのは本当に大ごとだが、kCTF 経由で報告され、報奨金が $71k にとどまったという点は少し驚き
Bryan Cantrill がまた正しかったな
一見空に見えるリポジトリにだまされないこと。エクスプロイトは README の下のほう にリンクされている
まだ試してはいないし、緩和策はない。作者たちは Android の root 化も可能だと主張しているので、Android エコシステムを考えると、自分のメーカーがパッチを出すのは1か月後くらいになりそう。しかも Chrome レンダラーサンドボックスからも動作する
これ Android でも動くの?
これがどう発見されたのか情報はある? Mythos は見逃したということだけど、別の大規模言語モデルの助けで見つけたのか、それとも人間がレビューして見つけたのか気になる
だとしたら、なぜこの部分を調べていたのかも気になる
「多くの Linux ディストリビューションは v6.4 以降ベースのカーネルを使っていて、まだ修正をバックポートしていなければ影響を受ける可能性がある。上記の修正コミットがバックポートされているかどうかは、ディストリビューションのカーネルセキュリティ更新を確認すること。古い v6.1 ベースのカーネルは、バグが v6.4 で導入されたため影響を受けない。」
残念。スマホの root 化にいい方法になることを期待していたけど、新しすぎて特に有用ではなさそう。自分のスマホは 5.15