一个感叹号的字符,把全球跑Linux的机器送到了root面前。
Ars Technica最近曝了个编号CVE-2026-23111的内核漏洞,位置在nf_tables子系统里。
这玩意儿是Linux内核里负责包过滤和NAT的核心模块,几乎所有现代发行版的防火墙都靠它撑着,用户量基数巨大。
出错的地方就一个感叹号。
一个“!”写错了位置,直接把对象删除的判断逻辑给翻转了。
先简单讲解一下里面的门道,内核里有种东西叫引用计数(reference count),通俗讲就是“还有几个人正在用这块内存”,计数归零才能安全释放。
正常逻辑是这样:删除一个元素,同步把链对象的引用计数减一,如果中途失败,就自动回滚,把减掉的那一加回来。
漏洞版本里因为判断条件被反转,引用计数被反复递减,本该回滚的没回滚,本该停下的没停下。
结果就出现了内核安全里最经典的那个雷:释放后重用(Use-After-Free,简称UAF)。
UAF的意思是,一块内存已经被释放回系统了,但代码还拿着之前的指针在那儿读写。
攻击者只要在这个空档把自己的数据塞进那块内存,内核就会拿着攻击者写的内容继续跑。
PoC已经公开,这意味着不是停留在理论层面的风险,代码摆在网上谁都能跑。
攻击路径大概是这样:
- • 触发UAF,泄露内核基址(内核加载到内存的起始地址,绕过KASLR地址随机化防护的关键)
- • 劫持程序控制流,把内核执行流引到攻击者准备好的代码
整条链路对老练的攻击者来说,属于熟练工种。
Debian、Ubuntu这些主流发行版上都能跑通,服务器、桌面、容器宿主机,凡是没打补丁的都在射程内。
这事有意思的地方在于:Linux主线内核早在今年2月就推过修复补丁,各大发行版也陆续跟进了。
漏洞披露到现在,留给运维的窗口期足够长。
但现实是,大量生产环境的内核版本停留在几个月甚至几年前,云上虚机、内网服务器、嵌入式设备,各种“跑得好好的别动”心态拖出来的旧版本,全都在风险名单里。
容器场景下还更微妙。共享内核的架构意味着,容器逃逸+内核提权一旦组合上,影响面会从单个pod扩散到整个宿主机。
对个人桌面用户,影响相对小,正常apt upgrade一下基本就过去了。
但对云服务商和企业运维,这是必须立刻排查的事:核对内核版本号、确认补丁是否落地、检查发行版security advisory对应的修复版本。
一个感叹号能撬动整个权限体系,这就是系统级软件的脆弱性写照。
代码评审、静态分析、模糊测试,这些听起来很无聊的工程实践,挡的就是这种单字符级别的灾难。
内核之所以是内核,不是因为它复杂,而是因为它错不起。