CVE-2026-46242
eventpoll: ep_remove の struct eventpoll / struct file UAF を修正
- 公開済み
- 2026/05/30
- 更新済み
- 2026/08/05
- CNA の割り当て
- Linux
- 観察された証拠
- 2026/08/08
プライマリ CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H低 · 今後 30 日間
- パーセンタイル
- 87.4%
- モデルの日付
- 2026/09/21
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
概要
Linux カーネルにおいて、以下の脆弱性が解決されました:eventpoll: ep_remove における struct eventpoll / struct file の UAF を修正。ep_remove()(ep_remove_file() 経由)は、file->f_lock の下で file->f_ep をクリアしましたが、その後もクリティカルセクション内(is_file_epoll()、ヘッド経由の hlist_del_rcu()、spin_unlock)で @file を使い続けていました。その間に eventpoll_release() の fastpath を取った並行する __fput() は、一時的な NULL を観測し、eventpoll_release_file() をスキップして f_op->release / file_free() に進みました。epoll が epoll を監視するケースでは、f_op->release は ep_eventpoll_release() -> ep_clear_and_put() -> ep_free() となり、監視対象の struct eventpoll を kfree() します。その内部に埋め込まれた ->refs hlist_head は、epi->fllink.pprev が指すまさにその位置にあるため、後続の hlist_del_rcu() による "*pprev = next" は、解放済みの kmalloc-192 メモリに書き込むことになります。さらに、struct file は SLAB_TYPESAFE_BY_RCU であるため、@file を支えるスロットは、ep_remove() が依然として名目上そのロック内にある間に、alloc_empty_file() によって再利用される可能性があります(その際に f_lock と f_ep が再初期化されます)。結果として、攻撃者が制御可能な kmem_cache_free() が誤った slab キャッシュに対して実行されることになります。ep_remove() の先頭で epi_fget() により @file をピン留めし、ピン留めの成功をクリティカルセクションの条件とします。ピンを保持している間、@file の参照カウントはゼロに達しないため __fput() が抑止され、間接的に、監視対象の struct eventpoll は hlist_del_rcu() と f_lock の使用をまたいで生存し続け、両方の UAF が解消されます。ピン留めが失敗した場合、@file はすでに参照カウントがゼロに達しており、その __fput() は実行中です。f_ep をクリアする前に処理を中断したため、そのパスは eventpoll_release() の slow path を通って eventpoll_release_file() に入り、待機側の ep_clear_and_put() がそれを解放するまで ep->mtx でブロックします。中断された epi の ep->refcount への寄与分はそのまま維持されるため、ep_clear_and_put() の末尾の ep_refcount_dec_and_test() は、eventpoll_release_file() の処理中に eventpoll を解放することはできません。孤児となった epi はその後、その場でクリーンアップされます。また、ピン留めの成功は、この epi に関して eventpoll_release_file() と競合していないことも証明するため、f_lock の下での epi->dying の再チェックは冗長となり、これを削除します。低コストでロックフリーの READ_ONCE(epi->dying) による fast-path の早期脱出は、そのまま残ります。
ソース
5- bad-epollエクスプロイト
Linuxカーネルの権限昇格エクスプロイト(CVE-2026-46242)は、epollにおける競合状態のuse-after-freeを悪用し、デスクトップ、サーバー、Androidデバイスで99%の信頼性でルート権限を取得します。
責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。