文章总结: 本文详析Linux内核CVE-2026-52912漏洞,因桥接改写skb->dev后NFQUEUE未增加引用计数引发Use-After-Free。结合公开Exploit演示了通过命名空间配置、堆喷绕过KASLR及构建ROP链实现本地提权的完整流程,并总结了漏洞成因与缓解措施,对内核防护具重要参考价值。 综合评分: 88 文章分类: 漏洞分析,二进制安全,漏洞POC,渗透测试
CVE-2026-52912 详细技术分析 Linux Kernel Netfilter / Bridge Use-After-Free 漏洞完整解析
Ots安全
2026年8月24日 14:26 广东
在小说阅读器读本章
去阅读
威胁简报
恶意软件
漏洞攻击
- 漏洞概述
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。
- 相关内核代码路径详解
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 触发
- 用户空间通过 netlink 删除桥接设备(RTM_DELLINK 或 ip link del br0)。
- 桥接主设备被释放(dev->refcnt 降到0后进入析构)。
- 排队中的 nf_queue_entry 里的 skb->dev 变成悬空指针。
- 用户空间对这个队列包发送 verdict(ACCEPT / 其他)。
- 内核执行 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 处理时使用保存的设备指针进行清理。
- 完整利用过程(以 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 创建:
- 一个 bridge 设备(例如 br0)
- 一对 veth(veth0 / veth1)
- 把 veth0 加入 br0
- 开启桥接的 netfilter 调用(IFLA_BR_NF_CALL_IPTABLES = 1)
- 配置 nftables / iptables 规则,把 NF_BR_LOCAL_IN 流量导向指定 NFQUEUE(queue number 例如 4242)
阶段三:触发 UAF
- 从 veth 发送数据包,使其进入桥接 LOCAL_IN 路径。
- 数据包在 br_pass_frame_up() 中被改写 skb->dev = br0,然后进入 NFQUEUE。
- 立即删除桥接设备 br0(此时排队的 skb 持有已释放的 br0 指针)。
- 对排队的数据包发送 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 权限。
-
漏洞为什么存在这么久?
-
桥接 + NFQUEUE 的组合在普通服务器上使用频率相对较低(更多出现在容器网络、复杂防火墙、虚拟化场景)。
-
引用计数逻辑分散在多个地方(state.in/out、physdev、skb->dev),容易遗漏。
-
设备删除与队列生命周期之间的时间窗口需要精确控制,普通 fuzz 较难稳定触发。
-
影响范围与缓解措施
- 受影响版本(大致):
- 从较老的 4.x / 5.x 一直到 6.19 左右未打补丁的内核
- 具体以发行版补丁为准(Ubuntu、Fedora、RHEL、Debian 等已陆续推送)
- 总结
CVE-2026-52912 是一个经典的“引用计数遗漏”导致的 UAF。核心问题在于:br_pass_frame_up() 修改了 skb->dev,但 nf_queue 入队时没有对这个新设备持有引用,导致设备被释放后仍被使用。
NebuSec 的公开 exploit 证明了该漏洞在现代内核(带 RANDOM_KMALLOC_CACHES 和 SELinux)上仍可被稳定利用为本地提权。
END
公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址
公众号 | AnQuan7 (Ots安全)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《CVE-2026-52912 详细技术分析 Linux Kernel Netfilter / Bridge Use-After-Free 漏洞完整解析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论