
非特权进程在 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 美元以上的奖励。
[!NOTE] Anthropic 的 AI Mythos 在同一段 epoll 代码中发现了另一个竞争漏洞,但遗漏了 Bad Epoll。
一个罕见的可 root Android 的漏洞。 大多数 Linux 权限提升漏洞根本无法 root Android。例如,Copy Fail 及其变体需要 Android 从不加载的模块。在 Google kernelCTF 上被利用的大约 130 个漏洞中,只有大约十个有望 root Android。Bad Epoll 就是其中之一。
没有关闭开关(kill-switch)。 Copy Fail 及其变体可以通过卸载存在漏洞的模块来消除, 但 epoll 没有这样的选项。它是操作系统、网络服务和浏览器都依赖的核心内核特性。 唯一的修复方式就是应用补丁。
竞争窗口极小,但攻击可靠性高达 99%。 该漏洞的竞争窗口只有大约六条指令宽,普通尝试几乎不可能命中。该漏洞利用程序会扩大这一窗口,并运行一个永不导致内核崩溃的重试循环。最终得到的是可靠性达 99% 的漏洞利用程序,如下文攻击概览所述。
2023 年的一个提交在总共只有约 2,500 行的 epoll 代码中引入了两个相互独立的竞争条件。事实证明,两者都是可导致权限提升的严重漏洞。
第一个由 Anthropic 的 Mythos 发现, 并被报告为 CVE-2026-43074。 这一成果本身就令人印象深刻,因为内核竞争漏洞以难以发现著称。它展示了前沿 AI 模型发现竞争漏洞的能力。随后,一位独立研究人员向 kernelCTF 提交了该漏洞的 1-day 利用程序。
另一个竞争漏洞就是 Mythos 遗漏的 Bad Epoll。鉴于 Mythos 在这段短小的 epoll 代码路径中 发现了第一个漏洞,它很可能以相当的深度检查过同一区域。我们无法确切知道它为何遗漏了 Bad Epoll,但很可能有两个因素使其难以被发现。
竞争窗口极小。 它只有大约六条指令 宽,因此即使盯着存在漏洞的代码看,也很难设想出确切的线程交错方式。
运行时证据很少。 在 CVE-2026-43074 被修复后,Bad Epoll 的 释放后使用通常不会触发 KASAN(内核的主要内存错误检测器)。缺少这一信号, Mythos 可能没有足够的信心将其报告为真实漏洞。
Bad Epoll 也难以修复。维护者的第一个补丁并未完全解决问题,正确的补丁在漏洞首次报告两个月后才落地。对于一个通常以紧迫态度处理安全问题的内核来说,这是一段很长的时间。
总而言之,Bad Epoll 表明竞争条件在每个阶段都何其困难。即使对前沿模型来说,它们也 难以发现、难以正确修复,而且如下一节所示,难以可靠利用。它还指明了一个在前沿 AI 模型 存在的情况下仍值得探索的漏洞研究方向:在狭窄的时序条件和微弱的证据背后发掘真实的安全影响。
下面为好奇的读者提供一份攻击的高层概述。
两个相互关联的 epoll 对象。同时关闭二者即触发竞争。
epoll 的两条关闭路径同时运行并发生冲突。一条路径释放对象时, 另一条路径仍在向其写入,这就是释放后使用(UAF)。
竞争窗口,以及漏洞利用程序如何驱动它。
该漏洞利用程序使用四个 epoll 对象,分成两对。一对触发竞争,另一对则成为受害者。 在此基础上,漏洞利用程序将 8 字节的 UAF 写入转化为对文件对象的 UAF, 并利用跨缓存(cross-cache)攻击完全控制文件内容。
通过 /proc/self/fdinfo 将该漏洞转化为内核内存任意读。
凭借这种控制能力,漏洞利用程序通过 /proc/self/fdinfo 获得内核内存的任意读取能力。
最后,它劫持控制流并执行 ROP 链,以获得 root shell。
由于 epoll 无法被禁用,Bad Epoll 没有简单的规避方法。唯一的补救措施是应用补丁。
a6dc643c6931,
或在其可用后应用发行版的向后移植(backport)。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 漏洞利用仍在开发中。
这个名字沿袭了可 root Android 的内核漏洞的“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)的修复合入主线。 |
| 2026-04-22 | 我们重新报告了剩余的问题。 |
| 2026-04-24 | 该漏洞的修复合入主线(提交 a6dc643c6931)。 |