漏洞概述
2026年7月,安全研究员Jaeyoung Chung公开了一个编号为CVE-2026-46242的Linux内核本地提权漏洞,并将其命名为“Bad Epoll”。该漏洞CVSS评分为7.8(高危),允许无特权的本地用户在Linux服务器、桌面系统及Android设备上将权限提升至root。
技术细节
Bad Epoll是一个位于内核epoll(eventpoll)子系统中的释放后重用(Use-After-Free, UAF)漏洞。具体问题出在ep_remove()函数中:该函数在file->f_lock锁保护下清除了file->f_ep指针,但随后仍在同一临界区内继续使用该文件对象执行hlist_del_rcu()和spin_unlock()操作。
此时,若另一个CPU核心上的__fput()调用恰好观察到这一瞬时的NULL值,便会跳过eventpoll_release_file()的正常清理路径,直接执行f_op->release,从而释放一个仍在被使用的struct eventpoll对象。由于struct file类型标记为SLAB_TYPESAFE_BY_RCU,被释放的内存槽位可被alloc_empty_file()重新回收利用,攻击者可借此触发针对错误slab缓存的kmem_cache_free(),最终实现内核内存的任意读写。
该漏洞的竞态窗口仅约6条机器指令宽。但Chung的利用程序通过巧妙构造——使用四个epoll对象分为两组,一组触发竞态、另一组成为受害对象——将8字节的UAF写入转化为针对文件对象的跨缓存攻击,再通过/proc/self/fdinfo实现内核内存任意读取,最终以ROP链劫持控制流获取root shell。在测试环境中,该利用程序成功率高达约99%。
影响范围与危险特性
该漏洞影响Linux内核6.4及以上版本(已打补丁的版本除外),基于6.1内核的系统(如Pixel 8等设备)不受影响。
Bad Epoll的严重性体现在两个方面:
其一,可影响Android系统。 历史上仅有极少数Linux内核漏洞能够在Android平台上实现root提权。kernelCTF收录的约130个可利用漏洞中,真正能提取Android root权限的仅约10个,Bad Epoll正是其中之一。
其二,可从Chrome渲染器沙箱内触发。 这意味着攻击者可将浏览器渲染器漏洞与Bad Epoll链式组合,实现从沙箱逃逸到完整内核代码执行。
由于epoll是Linux的核心I/O事件通知机制,无法被禁用或卸载,因此不存在有效的临时缓解措施。
发现始末:AI审计的边界
一个颇具戏剧性的背景是:Bad Epoll所在的同一段约2500行的epoll代码路径,此前已被Anthropic公司的前沿AI模型Mythos审查过。Mythos确实在该代码中发现了另一个竞态条件漏洞(CVE-2026-43074),但却遗漏了Bad Epoll。
Chung分析认为,Mythos未能发现Bad Epoll的原因可能有两个:其一,竞态窗口极小,即使盯着代码也难以推演确切的事件序列;其二,该漏洞在运行时几乎不留痕迹——修复CVE-2026-43074后,Bad Epoll的内存错误通常不会触发KASAN(内核的主要内存错误检测器)。
修复建议
上游修复补丁(commit a6dc643c6931)已于2026年4月24日合入Linux内核主线。各Linux发行版(Red Hat、SUSE、Debian、Canonical、Amazon等)已陆续发布安全公告。唯一可靠的防护措施是及时更新包含修复补丁的内核版本。