导语:又一个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版本中正式合入。
| Linux版本 | 状态 |
|---|---|
| Linux 5.1 之前 | 不受影响 |
| Linux 5.1 ~ 7.1.5 | 受影响(无vendor backport情况下) |
| Linux 7.1.6 | 已修复(commit fb29e1b41052) |
| Linux 7.2-rc1 ~ rc4 | 受影响 |
| Linux 7.2-rc5 及以上 | 已修复(commit f43ee0c0730d) |
Ubuntu发行版受影响情况(截至2026-08-12):
| Ubuntu版本 | 内核 | 状态 |
|---|---|---|
| Ubuntu 22.04 GA | 5.15.0-187.197 | 受影响的代码存在 |
| Ubuntu 22.04 HWE | 6.8.0-136.136 | 受影响的代码存在 |
| Ubuntu 24.04 HWE | 7.0.0-28.28 | 受影响的代码存在(allocator hardening导致exploit链不兼容) |
| Ubuntu 26.04 | 7.0.0-28.28 | 受影响的代码存在(allocator hardening导致exploit链不兼容) |
三、漏洞利用条件
PoC在以下测试环境中成功验证:
- 架构:x86-64 Linux,4个虚拟CPU
- 命名空间:启用非特权用户命名空间和网络命名空间(
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
- 文件描述符限制:至少4096
关键约束:
- 启用了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)
struct tc_estimator estimator = {.interval = 5, .ewma_log = 1};
addattr(nh, cap, TCA_RATE, &estimator, sizeof(estimator));
}
// 关键:act_police在验证estimator失败后,已经获取了R_tab和P_tab
// 然后在错误路径中释放它们,此时其他worker仍持有对同一对象的引用
4.3 关键数据结构
struct leaked_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 - 在容器环境中,限制CAP_NET_ADMIN能力
六、检测与响应
IoC指标:
- 内核版本为Linux 5.1 ~ 7.1.5或对应Ubuntu版本
- 系统存在大量
RTM_NEWTFILTER网络链接消息 - 进程尝试访问
/proc/self/ns/net
检测脚本(检查是否在受影响范围内):
# 检查内核版本
uname -r
# 检查是否应用了修复
grep -q "qdisc_rtab_lock" /proc/kallsyms && echo "已修复" || echo "可能受影响"
七、总结
CVE-2026-68138再次证明了Linux内核网络子系统的并发安全性问题。竞态条件漏洞虽然利用难度较高,但一旦成功即可获得系统最高权限,危害极大。
本次漏洞的特殊之处在于:
- 攻击面广:qdisc rate-table是内核流量控制的核心组件
- 影响周期长:自Linux 5.1引入,长达6年才修复
- 跨命名空间攻击:即使在不同的网络命名空间中也能竞争同一个全局对象
- 公开POC:已发布完整可用的exploit代码
建议所有使用Linux 5.1~7.1.5版本的用户尽快升级内核,或采取临时缓解措施。
版权声明:本文由华盟网原创发布,保留所有权利。











暂无评论内容