
导语:又一个Linux内核本地提权漏洞曝光。安全研究人员发现了CVE-2026-68138,这是存在于Linux流量控制(traffic-control)子系统中qdisc rate-table代码的一个竞态条件漏洞。攻击者只需一个普通用户权限,即可在数秒内获得root shell。目前公开了可用POC,影响范围覆盖Linux 5.1至7.1.5版本。
一、漏洞概述
CVE-2026-68138是一个存在于Linux内核qdisc rate-table代码中的竞态条件(Race Condition)本地权限提升漏洞。漏洞发现者为Aldo Ariel Panzardo,由安全研究员A. Ramos(@aramosf)于2026年8月12日公开了完整POC。
该漏洞的核心问题在于:qdisc_get_rtab()和qdisc_put_rtab()函数管理着一个全局单链表qdisc_rtab_list和一个普通非原子整数引用计数器refcnt。在历史版本中,调用者持有RTNL(Runtime Netlink Lock)互斥锁,这保证了的对链表的访问是串行化的。
然而,花分类过滤器(flower classifier)设置了TCF_PROTO_OPS_DOIT_UNLOCKED标志。当收到RTM_NEWTFILTER请求时,flower规则可以到达police动作,在没有持有RTNL锁的情况下调用qdisc rate-table helpers:
fl_change() → tcf_exts_validate_ex() → tcf_action_init() → tcf_police_init() → qdisc_get_rtab() / qdisc_put_rtab()
来自不同网络命名空间的并发请求会竞争同一个对象,导致struct qdisc_rate_table(在x86-64内核上为1056字节,从kmalloc-2k分配)的Use-After-Free或Double-Free。
二、影响版本
该漏洞的引入commit为470502de5bdb,在Linux 5.1版本中正式合入。
Ubuntu发行版受影响情况(截至2026-08-12):
| | |
|---|
| | 受影响的代码存在 |
| | 受影响的代码存在 |
| | 受影响的代码存在(allocator hardening导致exploit链不兼容) |
| | 受影响的代码存在(allocator hardening导致exploit链不兼容) |
三、漏洞利用条件
PoC在以下测试环境中成功验证:
- 命名空间:启用非特权用户命名空间和网络命名空间(
CONFIG_USER_NS=y、CONFIG_NET_NS=y) - 流量控制模块:需启用
CONFIG_NET_CLS=y、CONFIG_NET_CLS_FLOWER=y、CONFIG_NET_CLS_ACT=y、CONFIG_NET_ACT_POLICE=y - BPF支持:需要经典BPF socket过滤器和BPF JIT支持
- 文件系统:
CONFIG_TMPFS_XATTR=y(用于simple_xattr堆喷洒) - 模块支持:
CONFIG_MODULES=y,可用的/sbin/modprobe - 内存:建议至少5 GiB RAM的隔离 disposable VM
关键约束:
- 启用了memory-cgroup accounting的内核需要不同的回收策略,当前PoC不适用
- Ubuntu 24.04/26.04 HWE版本因allocator hardening,当前exploit链不兼容
四、PoC分析
4.1 攻击原理
该漏洞的利用依赖于精心设计的多线程竞态攻击。PoC创建4个工作线程,每个线程进入不同的网络命名空间,创建带有police动作的flower过滤器。
攻击流程:
- 三个worker走成功路径:创建flower过滤器并获取rate-table引用
- 一个worker(worker 0)走错误路径:在获取R_tab和P_tab后,提供一个故意无效的estimator,触发错误路径,释放两个表
- 竞态触发:在表被释放但指针仍被持有期间,其他worker的BPF分配可以喷射到同一内存槽
- Use-After-Free利用:通过SO_GET_FILTER检测socket的orig_prog->filter指针是否被重定向到另一个live BPF分配
- 权限提升:关闭一个owner会通过
sk_filter_release_rcu()延迟释放,grace period后PoC接管该内存,完成提权
4.2 核心代码片段
// 构建filter请求,关键在于故意提供无效estimator触发错误路径if (slow_holder) {// interval=5 是故意无效的(有效最大值是3)structtc_estimatorestimator = {.interval = 5, .ewma_log = 1}; addattr(nh, cap, TCA_RATE, &estimator, sizeof(estimator));}// 关键:act_police在验证estimator失败后,已经获取了R_tab和P_tab// 然后在错误路径中释放它们,此时其他worker仍持有对同一对象的引用
4.3 关键数据结构
structleaked_pipe_buffer {uint64_t page;uint32_t offset;uint32_t len;uint64_t ops;uint32_t flags;uint32_t padding;uint64_t private;};
通过管道buffer泄露内核指针,获取绕过KASLR所需的page和ops指针。
五、修复方案
上游官方修复:
- Mainline修复commit:f43ee0c0730d(7.2-rc5)
- Stable修复commit:fb29e1b41052(7.1.6)
修复方案为在qdisc_rtab_list和refcnt访问处增加qdisc_rtab_lock自旋锁保护。
临时缓解措施:
- 如果内核支持,禁用非特权用户命名空间:
sysctl -w kernel.unprivileged_user_ns=0 - 禁用网络命名空间:如果不需要,可以考虑限制
CONFIG_NET_NS
六、检测与响应
IoC指标:
- 内核版本为Linux 5.1 ~ 7.1.5或对应Ubuntu版本
- 系统存在大量
RTM_NEWTFILTER网络链接消息
检测脚本(检查是否在受影响范围内):
# 检查内核版本uname -r# 检查是否应用了修复grep -q "qdisc_rtab_lock" /proc/kallsyms && echo"已修复" || echo"可能受影响"
七、总结
CVE-2026-68138再次证明了Linux内核网络子系统的并发安全性问题。竞态条件漏洞虽然利用难度较高,但一旦成功即可获得系统最高权限,危害极大。
本次漏洞的特殊之处在于:
- 攻击面广:qdisc rate-table是内核流量控制的核心组件
- 影响周期长:自Linux 5.1引入,长达6年才修复
- 跨命名空间攻击:即使在不同的网络命名空间中也能竞争同一个全局对象
建议所有使用Linux 5.1~7.1.5版本的用户尽快升级内核,或采取临时缓解措施。
版权声明:本文由华盟网原创发布,保留所有权利。




👇 点击阅读原文,访问我的网站