CVE-2026-52912详细技术分析LinuxKernelNetfilter/BridgeUse-After-Free漏洞完整解析"

admin 2026-10-19 16:24:51 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

CVE-2026-52912 详细技术分析 Linux Kernel Netfilter / Bridge Use-After-Free 漏洞完整解析

Ots安全

2026年8月24日 14:26
广东

在小说阅读器读本章

去阅读

威胁简报

恶意软件

漏洞攻击

  1. 漏洞概述

CVE编号:CVE-2026-52912

漏洞类型:Use-After-Free(CWE-416)

影响组件:net/netfilter/nf\_queue.c + net/bridge/br\_input.c

CVSS v3.1:7.8(High)

攻击向量:本地(Local),需要一定权限(能创建用户命名空间 + 操作网络设备 + 配置 netfilter)

公开时间:2026年6月24日左右

上游修复时间:2026年5月(commit e196115ec330a18de415bdb9f5071aa9f08e53ce 等)

引入时间:相关桥接路径可追溯到约2016年(commit ac28634456867b23b95faccba7997a62ec430603)漏洞本质是:桥接设备在将数据包送入 NFQUEUE 时,改写了 skb->dev,但 NFQUEUE 没有对这个新的设备指针持有引用。当桥接主设    备被删除后,排队中的数据包仍然持有已释放的设备指针,后续 reinject 时就会触发 UAF。

  1. 相关内核代码路径详解

2.1 桥接数据包本地接收路

径当数据包到达桥接端口并需要送给本地协议栈时,会走以下路径:

// net/bridge/br_input.c

staticintbr_pass_frame_up(struct sk_buff *skb, bool promisc)
{
    structnet_device *indev, *brdev = BR_INPUT_SKB_CB(skb)->brdev;
    // ...

    indev = skb->dev; // 保存原始入口端口
    skb->dev = brdev; // ★ 关键:把 skb->dev 改成桥接主设备

    // 进入 Netfilter Bridge LOCAL_IN 钩子
    return NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_IN,
                   dev_net(indev), NULL, skb, indev, NULL,
                   br_netif_receive_skb);
}

这里 skb->dev 从物理端口被改写为桥接主设备(bridge master,例如 br0)。这是为了让后续协议栈(以及 netfilter)认为数据包是从桥设备收到的。

2.2 NFQUEUE 入队时的引用处理(漏洞点)

当 NF\_HOOK 中某个钩子返回 NF\_QUEUE 时,会调用 nf\_queue():

// net/netfilter/nf_queue.c(修复前简化逻辑)

boolnf_queue_entry_get_refs(struct nf_queue_entry *entry)
{
    struct nf_hook_state *state = &entry->state;

    // 持有 state.in / state.out
    if (state->in)
        dev_hold(state->in);
    if (state->out)
        dev_hold(state->out);

#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
    // 只持有 physin / physout(桥接物理设备)
    if (entry->physin)
        dev_hold(entry->physin);
    if (entry->physout)
        dev_hold(entry->physout);
    // ★ 问题:没有对 skb->dev(此时已经是 bridge master)做 dev_hold!
#endif

    returntrue;
}

在 br\_pass\_frame\_up() 执行之后,skb->dev 已经变成了 bridge master,但 nf\_queue\_entry 只保护了:

  • 原始的 state.in(物理端口)
  • physin / physout
  • 没有保护当前的 skb->dev(bridge master)

2.3 设备删除与 UAF 触发

  1. 用户空间通过 netlink 删除桥接设备(RTM\_DELLINK 或 ip link del br0)。
  2. 桥接主设备被释放(dev->refcnt 降到0后进入析构)。
  3. 排队中的 nf\_queue\_entry 里的 skb->dev 变成悬空指针。
  4. 用户空间对这个队列包发送 verdict(ACCEPT / 其他)。
  5. 内核执行 reinject:
// 简化后的 reinject 路径
br_netif_receive_skb(...)
    → 使用 skb->dev(已释放的 bridge master)
    → 访问已释放内存 → Use-After-Free

修复后的代码增加了:

// 修复后
structnf_queue_entry {
    ...
    structnet_device *skb_dev;   // 新增字段,保存入队时的 skb->dev
    ...
};

// get_refs 时
dev_hold(entry->skb_dev);

// release_refs 时
dev_put(entry->skb_dev);

并在 NETDEV\_DOWN 处理时使用保存的设备指针进行清理。

  1. 完整利用过程(以 NebuSec 公开 Exploit 为例)

NebuSec 在 2026年8月针对 Fedora 44(kernel 6.19.10-300) 发布了完整的本地提权 exploit(仓库:NebuSec/CyberMeowfia 下的 Linux-CVE-2026-52912-Fedora-6.19.10-300)。

3.1 利用前置条件

  • 内核开启了 CONFIG\_USER\_NS、CONFIG\_NET\_NS、CONFIG\_NF\_TABLES、桥接支持。
  • 攻击者能创建用户命名空间(普通用户通常可以)。
  • 目标内核未打补丁。

3.2 Exploit 整体流程

阶段一:环境准备与权限提升到 namespace root

// 进入 user + net + mount 命名空间
unshare(CLONE_NEWUSER);
write_text(\"/proc/self/setgroups\", \"deny\");
// 写 uid_map / gid_map,把自己映射为 namespace 内的 root
unshare(CLONE_NEWNET | CLONE_NEWNS);

此时在命名空间内已经是 root,可以随意创建网络设备和配置 netfilter。阶段二:搭建触发环境

使用 raw rtnetlink 创建:

  1. 一个 bridge 设备(例如 br0)
  2. 一对 veth(veth0 / veth1)
  3. 把 veth0 加入 br0
  4. 开启桥接的 netfilter 调用(IFLA\_BR\_NF\_CALL\_IPTABLES = 1)
  5. 配置 nftables / iptables 规则,把 NF\_BR\_LOCAL\_IN 流量导向指定 NFQUEUE(queue number 例如 4242)

阶段三:触发 UAF

  1. 从 veth 发送数据包,使其进入桥接 LOCAL\_IN 路径。
  2. 数据包在 br\_pass\_frame\_up() 中被改写 skb->dev = br0,然后进入 NFQUEUE。
  3. 立即删除桥接设备 br0(此时排队的 skb 持有已释放的 br0 指针)。
  4. 对排队的数据包发送 verdict,触发 reinject → UAF 发生。

阶段四:UAF 利用与信息泄漏

  • 通过控制释放后的内存布局(堆喷),把 UAF 转化为有用的原语。
  • 常见手段包括:

  • 使用 unix domain socket、packet socket、msg\_msg 等进行堆喷。

  • 利用 kernelsnitch 或已知页面泄漏技术获取内核基址(绕过 KASLR)。
  • 实现任意读 / 任意写或函数指针劫持。

阶段五:提权

典型 ROP 链(Fedora 偏移示例):

#define OFF_COMMIT_CREDS 0x425660
#define OFF_INIT_CRED 0x2a15840
#define OFF_KPTI_RETURN 0x1894
// 其他 gadget:pop rdi; ret / stack pivot 等

最终调用 commit\_creds(init\_cred),然后返回用户态,获得真正的 root 权限。

  1. 漏洞为什么存在这么久?

  2. 桥接 + NFQUEUE 的组合在普通服务器上使用频率相对较低(更多出现在容器网络、复杂防火墙、虚拟化场景)。

  3. 引用计数逻辑分散在多个地方(state.in/out、physdev、skb->dev),容易遗漏。
  4. 设备删除与队列生命周期之间的时间窗口需要精确控制,普通 fuzz 较难稳定触发。

  5. 影响范围与缓解措施

  • 受影响版本(大致):
  • 从较老的 4.x / 5.x 一直到 6.19 左右未打补丁的内核
  • 具体以发行版补丁为准(Ubuntu、Fedora、RHEL、Debian 等已陆续推送)
  1. 总结

CVE-2026-52912 是一个经典的“引用计数遗漏”导致的 UAF。核心问题在于:br\_pass\_frame\_up() 修改了 skb->dev,但 nf\_queue 入队时没有对这个新设备持有引用,导致设备被释放后仍被使用。

NebuSec 的公开 exploit 证明了该漏洞在现代内核(带 RANDOM\_KMALLOC\_CACHES 和 SELinux)上仍可被稳定利用为本地提权。

END

公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址

公众号 | AnQuan7 (Ots安全)


网络安全知识:保护网络基础设施设备,筑牢网络安全第一道防线" 网络安全文章

网络安全知识:保护网络基础设施设备,筑牢网络安全第一道防线"

网络基础设施设备因重建设轻维护等问题易被攻陷,导致全网瘫痪。建议落实十项措施提升防护:实施分区分域与虚拟隔离阻断横向移动,禁用不安全协议并强化配置基线,引入多因素认证与AAA集中管控,建立带外管理网络,加强供应链安全审查与日志监测,构建全生命周期纵深防御体系。
一键挖掘CVE工具AutoCVE" 网络安全文章

一键挖掘CVE工具AutoCVE"

本文介绍AutoCVE工具,其基于Multi-Agent架构实现源码审计、漏洞验证到报告生成的全流程自动化,支持Docker快速部署。文章仅提供基础功能与安装说明,文末附带付费社群推广,缺乏底层技术分析,深度较浅,属典型工具宣发与引流软文。
数据安全风险评估与等级测评法定强制性辨析" 网络安全文章

数据安全风险评估与等级测评法定强制性辨析"

本文辨析数据安全风险评估与等级测评的法定强制性差异。两者均具强制性,但数据安全风险评估由《数据安全法》直接规定义务,形成法律-行政法规-部门规章三级规范体系,法定强制性更强更直接。等级测评通过等级保护制度间接要求,其具体义务由配套规范明确。未来监管将形成多种制度并行格局,数据安全风险评估地位可能进一步提升。
评论:0   参与:  0