漏洞概述
Linux 内核 nftables 子系统中存在一个 释放后使用(use-after-free) 漏洞,允许非特权本地攻击者将权限提升至 root。该漏洞编号为 CVE-2026-23111,由安全研究员 Oliver Sieber(Exodus Intelligence)于 2025 年初发现,上游补丁于 2026 年 2 月 5 日 通过内核提交(commit f41c5d1)完成修复。
Oliver Sieber 发布了详细的技术分析及可用的漏洞利用代码,该利用在空闲系统上的成功率达 >99%,在高堆内存压力下(例如通过 Phoronix 测试套件运行 Apache 基准测试)仍保持约 80% 的可靠性。
受影响系统
此外,Red Hat、SUSE 及 Amazon Linux 也跟踪此漏洞。Ubuntu 将其评为 CVSS 7.8(高危)。
漏洞技术细节
根本原因
漏洞源于 nftables 子系统中的 nft_map_catchall_activate() 函数。该函数包含一个 反向条件检查(错误放置的运算符),导致在事务中止(abort)过程中错误地跳过了非活动的 catchall 元素,而非重新激活它们。
具体触发场景如下:
一个由 pipapo 算法支持的 verdict map,其中包含一个指向某链(chain)的 catchall 元素。
当该 map 被删除,且同一批次中的后续事务失败而触发中止时,catchall 元素将保持错误的非活动状态。
这导致所引用链的引用计数器归零,而实际上仍存在对该链的有效引用。
攻击者随后可以删除该链,但基链规则中仍保留一个悬空指针,从而触发 释放后使用 条件。
利用流程
利用代码通过 四个事务批次 操纵 nftables 的代数游标(generational cursor)机制:
第一批次:删除 pipapo 集合,然后强制产生错误触发中止,使链引用计数器错误递减。
第二批次:发送一个良性事务来切换代数游标。
第三批次:干净地删除 pipapo 集合,将链引用计数器降至零。
第四批次:删除链,同时基链中仍保留引用该链的活动规则。
绕过内核防护
KASLR 绕过:通过 kmalloc-cg-32 回收释放的 slab,使用 seq_operations 结构(通过 open("/proc/self/stat") 填充),并利用 NFT_MSG_GETRULE 请求泄漏内核函数指针。
堆地址泄漏:使用精心构造的 nft_rule 结构回收 kmalloc-cg-192 中的释放对象,通过其链表指针泄漏堆地址。
控制流劫持:将已删除链的指针覆盖为指向 ROP gadget(blob_gen_0 → push rbx; pop rsp)的伪造 nft_expr_ops 结构。最终 ROP 链调用 commit_creds(&init_cred) 获取 root 凭证,再通过 switch_task_namespaces() 逃逸命名空间隔离,实现完整的容器及命名空间逃逸。
命名空间限制绕过(Ubuntu 24.04)
Ubuntu 24.04 上由 AppArmor 实施的命名空间创建限制,可通过以下命令绕过:
aa-exec -p trinity -- unshare -Urmin /bin/sh
相关漏洞与公开时间线
值得注意的是,引入此漏洞的同一处代码修改还衍生出另一个相关漏洞(CVE-2026-23278),通过第二个内核补丁独立修复。
公开时间线:
目前该漏洞的利用技术已在 Debian、Ubuntu 和 Red Hat 上得到验证。任何提供了受影响内核版本且同时启用了 nftables 和非特权用户命名空间的发行版均存在风险。
修复与缓解措施
立即更新
临时缓解(如无法立即更新)
在 Ubuntu 系统上,通过设置以下内核参数限制非特权用户命名空间的创建:
kernel.unprivileged_userns_clone=0
此方法可在策略允许的情况下提供部分缓解。
背景与风险提示
该漏洞属于近期 Linux 本地提权漏洞密集披露浪潮中的一例,同期还出现了 Copy Fail、Dirty Frag 及其变体 Fragnesia、DirtyDecrypt,以及一个存在九年的 ptrace 漏洞(可读取 /etc/shadow 并以 root 执行命令)。
这些漏洞的共同特点是:一旦攻击者获得低权限 shell、被攻陷的容器或服务账户,便可在普通安装的系统上轻易获得 root 权限。目前尚无公开报告显示该漏洞已在野外被利用,但利用代码自 2026 年 4 月起已公开,建议所有受影响系统尽快更新并重启。
根据 Synacktiv 的近期分析,AI 辅助研究和补丁对比(patch-diffing)加速了漏洞利用的发布,往往早于补丁的全面部署。适当的内核加固(如关闭非特权用户命名空间)可以为管理员争取宝贵的响应时间。