
Linuxカーネルの権限昇格エクスプロイト(CVE-2026-46242)は、epollにおける競合状態のuse-after-freeを悪用し、デスクトップ、サーバー、Androidデバイスで99%の信頼性でルート権限を取得します。

Google kernelCTF上で非特権プロセスがrootに昇格している様子。
Bad Epoll(CVE-2026-46242)は、Linuxカーネルの epoll サブシステムにおける競合状態のuse-after-free脆弱性です。このバグにより、非特権プロセスがルート権限を取得でき、Linuxデスクトップやサーバーだけでなく、Androidデバイスでも影響を受けます。
Bad Epollは、Jaeyoung Chung によってGoogle kernelCTF へのゼロデイ提出として報告・悪用されました。同CTFはLinuxカーネルエクスプロイトに71,337ドル以上の報奨金を提供しています。
[!NOTE] AnthropicのAI Mythos は、同じepollコード内で別の競合バグ を発見しましたが、Bad Epollは見逃しました。
Androidをroot化できる稀なバグ。 ほとんどのLinux権限昇格バグはAndroidをroot化できません。例えば Copy Fail やその亜種は、Androidが決してロードしないモジュールを必要とします。GoogleのkernelCTFで悪用された約130件の脆弱性のうち、Androidをroot化できる候補はわずか10件程度です。Bad Epollはその1つです。
キルスイッチが存在しない。 Copy Failとその亜種は脆弱なモジュールをアンロードすることで無効化できますが、epollにはそのような選択肢はありません。epollはオペレーティングシステム、ネットワークサービス、ブラウザのすべてが依存するコアカーネル機能です。修正する唯一の方法はパッチを適用することです。
競合ウィンドウは極小だが、攻撃成功率は99%。 バグの競合ウィンドウはわずか約6命令分の幅しかなく、通常の試行ではほとんどヒットしません。エクスプロイトはそのウィンドウを拡大し、カーネルをクラッシュさせないリトライループを実行します。結果として、以下の攻撃概要で説明するように、99%の信頼性を持つエクスプロイトとなります。
2023年の単一のコミットにより、epollコード(全体で約2,500行)に2つの独立した競合状態が導入されました。どちらも権限昇格につながる重大なバグであることが判明しました。
最初のバグはAnthropicのMythosによって発見され、CVE-2026-43074として報告されました。カーネルの競合バグは発見が難しいことで知られているため、この結果はそれ自体が印象的であり、フロンティアAIモデルが競合バグを発見する能力を示しました。独立した研究者は後に、その1-dayエクスプロイトをkernelCTFに提出しました。
もう1つの競合状態がBad Epollであり、Mythosはこれを見逃しました。Mythosがこの小さなepollコードパスで最初のバグを発見したことを考えると、同じ領域をある程度の深さで調査した可能性が高いです。MythosがBad Epollを見逃した正確な理由はわかりませんが、以下の2つの要因により発見が困難だったと考えられます。
競合ウィンドウが極小。 わずか約6命令分の幅しかないため、脆弱なコードを見ていても正確なスレッドインターリーブを想像するのは困難です。
実行時の証拠がほとんどなかった。 CVE-2026-43074が修正された後、Bad Epollのuse-after-freeは通常、カーネルの主要なメモリエラー検出器であるKASANをトリガーしません。そのシグナルがなければ、Mythosはこれを実際のバグとして報告する十分な確信を得られなかった可能性があります。
Bad Epollの修正も困難でした。メンテナによる最初のパッチは問題を完全に修正しておらず、正しいパッチが適用されたのはバグが最初に報告されてから2か月後のことでした。通常セキュリティ問題を緊急に扱うカーネルとしては長い期間です。
全体として、Bad Epollは競合状態があらゆる段階でいかに困難であるかを示しています。フロンティアモデルでも発見が難しく、正しく修正するのも難しく、次のセクションで示すように信頼性のある悪用も困難です。また、フロンティアAIモデルが存在する状況でも依然として探求する価値がある脆弱性研究の方向性を示唆しています。すなわち、狭いタイミング条件と弱い証拠の背後にある実際のセキュリティへの影響を明らかにすることです。
好奇心旺盛な方向けに、攻撃の概要を以下に示します。
リンクされた2つのepollオブジェクト。両方を同時にクローズすると競合が発生する。
epollの2つのクローズパスが同時に実行され衝突します。一方がオブジェクトを解放している間に、もう一方がそのオブジェクトに書き込みを行い、これがuse-after-free(UAF)となります。
競合ウィンドウと、エクスプロイトがそれを引き起こす方法。
エクスプロイトは4つのepollオブジェクトを2組にグループ化して使用します。1組が競合をトリガーし、もう1組が犠牲者となります。そこからエクスプロイトは、8バイトのUAF書き込みをファイルオブジェクトのUAFに変換し、クロスキャッシュ攻撃を使用してファイルの内容を完全に制御します。
/proc/self/fdinfoを通じてバグを任意のカーネルメモリ読み取りに変換する。
その制御により、エクスプロイトは /proc/self/fdinfo を通じてカーネルメモリの任意読み取りを獲得します。最後に制御フローを乗っ取り、ROPチェーンを実行してルートシェルを取得します。
epollは無効化できないため、Bad Epollには簡単な回避策はありません。唯一の対策はパッチを適用することです。
a6dc643c6931 を適用するか、ディストリビューションのバックポートが利用可能になり次第適用してください。Bad Epollは 58c9b016e128(2023-04-08) で導入され、a6dc643c6931(2026-04-24) で修正されました。
多くのLinuxディストリビューションは、v6.4以降のカーネルを使用しており、上記の修正をバックポートしていない場合、影響を受ける可能性があります。お使いのディストリビューションのカーネルセキュリティアップデートで、修正コミットのバックポートを確認してください。v6.1ベースの古いカーネルは、バグがv6.4で導入されたため影響を受けません。
現在のエクスプロイトは、以下のGoogle kernelCTFターゲット向けに作成されています。
lts-6.12.67(LTS)、99%の信頼性cos-121-18867.294.100(COS)、98%の信頼性Androidエクスプロイトは現在開発中です。
この名称は、Androidをroot化するカーネルバグの「Bad」シリーズに従ったものです。初期のものには Bad Binder、Bad IO_uring、Bad Spin があります。Bad Epollはepoll版です。
このページは短縮版です。根本原因の分析、エクスプロイト解説、エクスプロイトコードは以下のリンクにあります。
Bad EpollはJaeyoung Chungによって報告・悪用されました。
私たちの研究グループであるCompSec Lab、特にEulgyu Kim、Woohyuk Choi、Dae R. Jeong、そして指導教官のByoungyoung Leeに多大なる感謝を捧げます。彼らの指導と支援に深く感謝します。
| 日付 | 出来事 |
|---|
| 2023-04-08 | バグがepollに導入されました(コミット 58c9b016e128)。 |
| 2026-02-17 | バグを[email protected]に報告しました。 |
| 2026-02-17 | メンテナがパッチのプロトタイプを提案しましたが、正しい修正ではなく、その後議論は停滞しました。 |
| 2026-04-02 | Mythosが発見したバグ(CVE-2026-43074)の修正がmainlineに取り込まれました。 |
| 2026-04-22 | 残りの問題を再度報告しました。 |
| 2026-04-24 | このバグの修正がmainlineに取り込まれました(コミット a6dc643c6931)。 |