新披露的 Linux 内核漏洞 CVE-2026-23111 允许本地攻击者利用 nftables 子系统中的释放后使用漏洞将权限提升至 root。
该漏洞已在上游修复,它会影响 netfilter 框架,特别是 nftables,该框架广泛用于现代 Linux 发行版中的数据包过滤、NAT 和防火墙规则管理。
据 Exodus Intelligence 报道,该漏洞已在 Debian Bookworm、Debian Trixie、Ubuntu 22.04 LTS 和 Ubuntu 24.04 LTS 上得到成功利用,凸显了该漏洞对企业和服务器环境的广泛影响。
从本质上讲,该缺陷在于对 nftables 判决映射的处理,尤其是在事务规则更新期间使用“兜底”元素和生成掩码。
Linux 内核采用分代机制来确保防火墙规则集的原子性更新,将对象在“当前”代和“下一”代中标记为活动或非活动状态。
然而,nft_map_catchall_activate() 函数中的逻辑错误导致它在回滚(中止)操作期间跳过非活动元素,从而使某些对象处于不一致的状态。
此缺陷会导致引用计数问题。当包含引用链的兜底元素的判决映射被删除时,该链的引用计数器会递减。
如果在同一事务批次中发生错误,内核会尝试撤销删除操作,但由于存在漏洞,捕获所有元素无法正确重新激活,引用计数器也无法恢复。因此,即使链仍在其他地方被引用,它也可能显示为未使用(引用计数为 0)。
这种情况使得攻击者能够提前删除链,从而造成典型的释放后使用(use-after-free)场景,即已释放的内存仍然被引用。通过精心策划跨多个批次的 nftables 事务,攻击者可以可靠地触发此状态并获得对已释放内核对象的控制权。
利用该漏洞的过程包含多个阶段。首先,攻击者通过在网络命名空间内构造 nftables 操作来触发漏洞,而该网络命名空间在特定条件下非特权用户可以创建。
然后,攻击者利用悬空指针泄露敏感的内核内存,包括内核基地址,从而有效地绕过内核地址空间布局随机化(KASLR)。
接下来,通过使用受控数据结构回收已释放的内存区域,可以泄露堆内存地址。这些泄露使得对内核堆布局进行精确操控成为可能,这对于可靠的漏洞利用至关重要。
最后,攻击者通过覆盖内核结构中的函数指针来劫持控制流,从而执行面向返回的编程 (ROP) 链。
例如,攻击者可以覆盖回收内存中的函数指针,这样当内核通过 nftables 处理数据包时,就会执行攻击者控制的代码路径。
该漏洞最终会调用诸如 commit_creds() 之类的内核函数,并使用 init_cred 授予 root 权限,从而有效地突破用户限制,在某些情况下,还会突破容器隔离边界。
值得注意的是,研究人员报告称该漏洞利用方法具有很高的可靠性,在空闲系统上成功率超过 99%,在高负载条件下成功率也约为 80%。这种稳定性使得该漏洞在实际应用场景中尤其危险。
这个问题凸显了像 nftables 这样复杂的内核子系统的风险,其中一些细微的逻辑错误,例如条件检查位置错误,都可能导致严重的安全后果。在本例中,条件语句中一个错误的否定运算符就足以引入权限提升途径。
强烈建议 Linux 用户和管理员更新到包含 CVE-2026-23111 修复程序的已打补丁的内核版本。允许非特权用户命名空间或提供对 nftables 功能访问权限的系统尤其容易受到攻击,应优先进行修复。
安全团队还应监控可疑的 nftables 活动、异常的 netlink 交互或未经授权的命名空间创建,因为这些可能表明有人试图在活跃环境中利用此漏洞。