欢迎回来
登录你的知识库账户
忘记密码?
还没有账户?立即注册
创建账户
注册你的专属知识库
已有账户?去登录
找回密码
输入注册邮箱获取验证码
返回登录
请输入图片中的验证码以继续注册
加载中...
取消
新建收藏
手动添加你喜欢的内容
取消
编辑头像与昵称
上传新头像或修改你的显示昵称
支持 JPG/PNG,最大 2MB
取消

问题反馈

notebasewww.notebase.cn
控制台
内容库
动态
管理
账户
U
用户
--
在线
v0.8.7 · 知识库
笔记
KnowledgeBase
网络无边,知识有迹。
0笔记
0工具
30推荐

分类导航

按主题直达

编辑精选

站内用户贡献 · 真实笔记

最新收录

每日更新
继续浏览全部内容 →
>
笔记
0
加载中...
工具
0
此页用于记录用户反馈问题后的每一次改进
笔记用法

“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。

md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。

要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。

工具用法

在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。

要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。

工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。

隐藏笔记

写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。

适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。

数据安全

你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。

技术

全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。

理念

这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。

原则

不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。

更多

产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。

举报

如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。

趋势
// 点击导航加载发现
归档
// 归档为空
最近浏览
// 暂无浏览记录
发布
// 加载中...
用户发布
// 加载中...
用户管理
// 加载中...
访问统计
// 加载中...
内容审核
// 加载中...
个人信息
// 加载中...
返回首页

新型“Bad Epoll”0Day漏洞可获取Linux服务器与Android设备的Root权限

2026/7/3安全技术

好,这篇东西我反复读了几遍,越看越觉得有意思。说实话,这两年Linux内核的漏洞挖得越来越深,但像“Bad Epoll”这种能同时打服务器和Android设备的,确实不多见。尤其是它还是个0Day,而且是从epoll这种我们每天都在用的核心机制里挖出来的——这就很有意思了,值得好好掰扯掰扯。

先快速过一下背景。这个漏洞编号是CVE-2026-46242,名字叫“Bad Epoll”。发现者是Jaeyoung Chung,他把它作为0Day提交给了Google的kernelCTF项目。kernelCTF是啥?就是Google搞的一个内核漏洞悬赏计划,专门收Linux内核的有效利用代码,最低奖金71,337美元——你没看错,七万多美金起步。能拿到这笔钱的漏洞,基本都不是善茬。

这个漏洞的核心问题出在epoll子系统里,具体是ep_remove()这个函数。如果你写过网络相关的服务端程序,epoll你应该不陌生,它是Linux下高性能I/O多路复用的核心机制,几乎所有的网络框架、事件循环、甚至Android的Binder通信都在用。正因为它是内核的“基础设施”,一旦出了问题,波及面就非常广。

漏洞到底出在哪?

我们先从代码层面理解一下。ep_remove()函数的工作是移除一个被epoll监视的文件描述符。它会在file->f_lock这把锁的保护下,清除file->f_ep这个指针。关键问题在于:在执行hlist_del_rcu()(从哈希链表中删除节点)和spin_unlock()(释放锁)的过程中,它还在继续使用临界区内的文件对象。

你可能会想:这不就是常见的“释放后重用”(Use-After-Free, UAF)吗?对,但这次的情况更隐蔽,因为它涉及到一个非常微妙的竞态条件。

具体来说,当另一个线程并发调用__fput()(文件对象的最终释放函数)时,它可能会观察到file->f_ep临时变成了NULL。正常情况下,__fput()应该调用eventpoll_release_file()来通知epoll子系统“这个文件要挂了,你清理一下”。但如果它看到f_ep是NULL,就会跳过这个关键步骤,直接执行f_op->release。结果就是:一个仍然被epoll监视着的eventpoll结构体,被错误地提前释放了。

这就好比你在酒店退房,前台告诉你“你的房间号已经清空了”,但实际上你的行李还在房间里。酒店就把房间重新租给了别人,你的行李(eventpoll结构体)就被别人拿走了。

为什么这么难修?

这里有个更深的坑:struct file采用的是SLAB_TYPESAFE_BY_RCU机制。这个机制的意思是,slab分配器在释放一个对象后,不会立即清空内存,而是允许RCU(Read-Copy-Update)读者在释放后的一小段时间内仍然可以安全地读取该对象。这本身是为了性能优化,但在这里却成了漏洞利用的帮凶。

因为内存槽被释放后,可能被alloc_empty_file()重新分配,用于创建一个新的文件对象。攻击者就可以利用这个时机,对错误的slab缓存触发kmem_cache_free(),造成内核内存的进一步损坏。

更让人头疼的是,这个漏洞的竞态窗口非常窄——只有大约6条指令的宽度。6条指令什么概念?在CPU乱序执行、缓存命中的情况下,可能连一个微秒都不到。但Chung的利用方案通过扩大时间窗口(比如用大量线程同时触发)和崩溃重试机制,在测试目标上达到了约99%的成功率。这已经不是“理论可行”的级别了,而是“拿来就能用”的实战水平。

两个漏洞,一个比一个深

这里还有个有趣的背景故事。2023年,某个内核提交在2500行的epoll代码路径中引入了两个独立的竞态条件。第一个漏洞(CVE-2026-43074)是由Anthropic的AI模型Mythos发现的。你没看错,是AI。这说明前沿AI在发现内核竞态漏洞方面已经展现出了惊人的能力。

但Mythos漏掉了第二个,也就是Bad Epoll。为什么漏了?因为它的时间窗口更窄,而且很难触发内核的主要内存错误检测器KASAN(Kernel Address Sanitizer)。KASAN是内核用来检测内存越界、UAF等问题的利器,但如果漏洞的触发条件太苛刻,KASAN也未必能抓到。这就导致Bad Epoll在运行时几乎不留痕迹,非常难以被发现和调试。

更离谱的是,维护者的第一次补丁尝试没能彻底解决问题。最终修复方案在漏洞披露近两个月后才正式发布。这期间,攻击者如果已经知道了这个漏洞,完全可以在补丁出来之前大肆利用。

攻击流程拆解

Chung的利用方案大致分为几步:

  1. 准备四个epoll对象,分成两组。关闭其中一组来触发竞态条件,另一组则成为“受害对象”。
  2. 跨缓存攻击:通过精心构造的内存布局,将一个8字节的UAF写入转化为文件对象的UAF。
  3. 信息泄露:利用/proc/self/fdinfo获取任意内核内存读取权限。这一步很关键,因为现代内核开启了KASLR(内核地址空间布局随机化),你需要先知道内核代码和数据的内存布局。
  4. ROP链劫持:拿到了内核内存的读取权限后,就可以构造面向返回编程(ROP)链,劫持控制流,最终获取root shell。

整个攻击链环环相扣,每一步都需要对内核内存管理、slab分配器、epoll内部数据结构有极其深入的理解。这也是为什么这类漏洞的悬赏金额这么高——能写出来的人,本身就是顶尖的内核安全研究员。

影响面有多大?

前面说了,这个漏洞不仅能打Linux服务器和桌面系统,还能打Android设备。原因很简单:epoll是Linux内核的核心组件,无法被禁用或卸载。相比之下,有些漏洞利用的模块(比如之前提到的“Copy Fail”漏洞)是可选的,Android厂商可以选择不编译或者不加载。但epoll不行,Android的Binder、SurfaceFlinger、甚至应用层的事件循环都依赖它。禁掉epoll,手机基本就废了。

所以,目前没有任何有效的缓解措施。管理员和应用开发者只能等待上游补丁,或者等发行版向后移植修复。对于Android用户来说,这意味着你需要等待手机厂商推送安全更新——而这个周期往往是以月为单位计算的。

我们能学到什么?

从技术角度看,这个漏洞再次提醒我们:并发编程的坑,永远挖不完。即使像epoll这样被广泛使用、经过无数次review的代码,依然能在2500行中藏下两个独立的竞态条件。而且,其中一个还是AI发现的,这说明自动化漏洞挖掘已经进入了“卷”的阶段。

从安全实践的角度看,不要以为“没人会闲着没事挖内核漏洞”。七万美金的悬赏,加上0Day在黑市上的价格,足够让顶尖研究员投入大量精力。对于企业来说,及时更新内核、启用KASAN(虽然性能有损耗)、部署内核热补丁(如kpatch),都是值得考虑的防御措施。

最后,如果你在写内核模块或者驱动,对epoll相关的操作一定要慎之又慎。尤其是涉及到文件对象的生命周期管理、锁的释放顺序、以及RCU的使用,多想想“如果另一个线程同时操作会怎样”。因为现实世界的并发问题,往往不会在你测试的时候出现,只会在生产环境最忙的时候给你致命一击。


好了,这篇就聊到这。如果你对epoll的内部实现感兴趣,或者想看看完整的利用代码(等公开后),我后面可以再写一篇更底层的分析。

编写使用方法
Markdown 格式 · Ctrl+Enter 确定
新建笔记
预览
数据表格
点击单元格编辑 · Tab 移动
A1fx
Sheet1
BIH1H2≡🔗</>
隐私提醒

取消
编辑工具
取消