
在 Google kernelCTF 上,一个非特权进程提权至 root。
Bad Epoll(CVE-2026-46242)是 Linux 内核 epoll 子系统中的一个竞态条件释放后使用(use-after-free)漏洞。该漏洞可让非特权进程获得 root 权限,不仅影响 Linux 桌面和服务器,也影响 Android 设备。
Bad Epoll 由 Jaeyoung Chung 报告并利用,作为 0-day 提交至 Google kernelCTF,该计划为 Linux 内核漏洞利用提供 $71,337+ 的奖励。Bad Epoll 的提交获得了 $92,337 的奖励。
[!NOTE] Anthropic 的 AI Mythos 在同一段 epoll 代码中发现了另一个竞态漏洞,但遗漏了 Bad Epoll。
一个罕见的可 root Android 的漏洞。 大多数 Linux 提权漏洞根本无法 root Android。例如 Copy Fail 及其变体需要 Android 从不加载的模块。在 Google kernelCTF 上被利用的约 130 个漏洞中,只有大约十个有可能 root Android。Bad Epoll 就是其中之一。
没有关闭开关。 Copy Fail 及其变体可以通过卸载其存在漏洞的模块来消除,但 epoll 没有这样的选项。它是操作系统、网络服务和浏览器都依赖的核心内核功能。唯一的修复方法是应用补丁。
竞态窗口极小,但攻击 99% 可靠。 该漏洞的竞态窗口仅约六条指令宽,正常尝试几乎不可能命中。该漏洞利用扩大了该窗口,并运行一个不会导致内核崩溃的重试循环。结果是 99% 可靠的漏洞利用,如下方攻击概述所述。
2023 年的一个提交在 epoll 代码中引入了两个独立的竞态条件,而该代码总共只有约 2,500 行。两者最终都被证明是可导致提权的严重漏洞。
第一个由 Anthropic 的 Mythos 发现,并报告为 CVE-2026-43074,详情见 Anthropic 的公开报告 ANT-2026-CM0TCREP。这一成果本身就令人印象深刻,因为内核竞态漏洞以难以发现而闻名。它展示了前沿 AI 模型发现竞态漏洞的能力。一位独立研究员后来向 kernelCTF 提交了 1-day 漏洞利用。
另一个竞态就是 Bad Epoll,Mythos 遗漏了它。鉴于 Mythos 在这条小型 epoll 代码路径中发现了第一个漏洞,它很可能对同一区域进行了有相当深度的检查。我们无法确切知道它为何遗漏了 Bad Epoll,但有两个因素可能使其难以发现。
竞态窗口极小。 它仅约六条指令宽,因此即使查看存在漏洞的代码,也很难想象出确切的线程交错方式。
几乎没有运行时证据。 在 CVE-2026-43074 修复后,Bad Epoll 的释放后使用通常不会触发 KASAN——内核的主要内存错误检测器。没有这一信号,Mythos 可能没有足够的信心将其报告为真实漏洞。
Bad Epoll 也很难修复。维护者的第一个补丁并未完全修复该问题,正确的补丁在漏洞首次报告两个月后才落地。对于一个通常紧急处理安全问题的内核来说,这是很长的时间。
总体而言,Bad Epoll 展示了竞态条件在每个阶段都多么困难。即使对前沿模型来说也难以发现,难以正确修复,而且如下一节所示,难以可靠利用。它还表明,在前沿 AI 模型存在的情况下,一个仍然值得探索的漏洞研究方向:在狭窄的时序条件和微弱证据背后,揭示真实的安全影响。
[!NOTE] 独立研究员 Qi Tang 和 Junxi Qian 也在 2026 年 3 月 30 日,即与 Anthropic 同一天,向 Linux 内核团队报告了 CVE-2026-43074。 他们的名字被无意中从上游修复的致谢中遗漏。 感谢 Guidong Han 指出这些独立报告。 这三位研究员后来发现了 epoll 中又一个竞态条件释放后使用漏洞。
以下是攻击的高层概述,供好奇者参考。
两个相互链接的 epoll 对象。同时关闭两者会触发竞态。
epoll 的两条关闭路径同时运行并发生冲突。一条路径释放了一个对象,而另一条路径仍在向其写入,这就是释放后使用(UAF)。
竞态窗口,以及漏洞利用如何驱动它。
该漏洞利用使用四个 epoll 对象,分为两对。一对触发竞态,另一对成为受害者。由此,漏洞利用将 8 字节的 UAF 写入转化为对文件对象的 UAF,并使用跨缓存攻击完全控制文件的内容。
通过 /proc/self/fdinfo 将该漏洞转化为任意内核内存读取。
凭借这种控制,漏洞利用通过 /proc/self/fdinfo 获得对内核内存的任意读取。最后,它劫持控制流并执行 ROP 链以获得 root shell。
由于 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 漏洞利用仍在进行中。
| 日期 | 事件 |
|---|---|
| 2023-04-08 | 该漏洞被引入 epoll(提交 58c9b016e128)。 |
| 2026-02-17 | 我们向 [email protected] 报告了该漏洞。 |
| 2026-02-17 | 维护者提出了一个补丁原型,但它并非正确的修复,讨论随后停滞。 |
| 2026-03-30 | CVE-2026-43074 由 Anthropic 及独立研究员 Qi Tang 和 Junxi Qian 报告给 Linux 内核团队。 |
| 2026-04-02 | CVE-2026-43074 的修复进入主线。 |
| 2026-04-22 | 我们重新报告了剩余问题。 |
| 2026-04-24 | 该漏洞的修复进入主线(提交 a6dc643c6931)。 |
这个名字沿用了 "Bad" 系列 Android root 内核漏洞的命名,其早期条目包括 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, 感谢他们的指导和支持。