CVE-2026-68138:Linux内核qdisc rate-table竞态条件本地提权漏洞(含POC)

导语:又一个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。

CVE-2026-68138漏洞原理图

二、影响版本

该漏洞的引入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 GA5.15.0-187.197受影响的代码存在
Ubuntu 22.04 HWE6.8.0-136.136受影响的代码存在
Ubuntu 24.04 HWE7.0.0-28.28受影响的代码存在(allocator hardening导致exploit链不兼容)
Ubuntu 26.047.0.0-28.28受影响的代码存在(allocator hardening导致exploit链不兼容)

三、漏洞利用条件

PoC在以下测试环境中成功验证:

  • 架构:x86-64 Linux,4个虚拟CPU
  • 命名空间:启用非特权用户命名空间和网络命名空间(CONFIG_USER_NS=yCONFIG_NET_NS=y
  • 流量控制模块:需启用CONFIG_NET_CLS=yCONFIG_NET_CLS_FLOWER=yCONFIG_NET_CLS_ACT=yCONFIG_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过滤器。

攻击流程

  1. 三个worker走成功路径:创建flower过滤器并获取rate-table引用
  2. 一个worker(worker 0)走错误路径:在获取R_tab和P_tab后,提供一个故意无效的estimator,触发错误路径,释放两个表
  3. 竞态触发:在表被释放但指针仍被持有期间,其他worker的BPF分配可以喷射到同一内存槽
  4. Use-After-Free利用:通过SO_GET_FILTER检测socket的orig_prog->filter指针是否被重定向到另一个live BPF分配
  5. 权限提升:关闭一个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指针。


五、修复方案

上游官方修复

修复方案为在qdisc_rtab_listrefcnt访问处增加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内核网络子系统的并发安全性问题。竞态条件漏洞虽然利用难度较高,但一旦成功即可获得系统最高权限,危害极大。

本次漏洞的特殊之处在于:

  1. 攻击面广:qdisc rate-table是内核流量控制的核心组件
  2. 影响周期长:自Linux 5.1引入,长达6年才修复
  3. 跨命名空间攻击:即使在不同的网络命名空间中也能竞争同一个全局对象
  4. 公开POC:已发布完整可用的exploit代码

建议所有使用Linux 5.1~7.1.5版本的用户尽快升级内核,或采取临时缓解措施。

版权声明:本文由华盟网原创发布,保留所有权利。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容