CVE-2026-52943
net: skbuff: 修复 pskb_carve 辅助函数中缺失的 zerocopy 引用
- 已发布
- 2026年6月24日
- 已更新
- 2026年9月8日
- 分配 CNA
- Linux
- 观察到的证据
- 2026年8月17日
初级CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H低 · 未来 30 天
- 百分位
- 15.1%
- 型号日期
- 2026年9月21日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
在 Linux 内核中,以下漏洞已被修复:net: skbuff: 修复 pskb_carve 辅助函数中缺失的 zerocopy 引用 `pskb_carve_inside_header()` 和 `pskb_carve_inside_nonlinear()` 都通过 `memcpy()` 将旧的 `skb_shared_info` 头复制到新缓冲区中,其中包含用于 MSG_ZEROCOPY skb 的 `destructor_arg` 指针(uarg)。这两个函数都没有为新 shinfo 调用 `net_zcopy_get()`,从而产生了一个未计入的持有者:每个设置了 `destructor_arg` 的 `skb_shared_info` 在释放时都会调用一次 `skb_zcopy_clear()`,但从未为新副本调用过对应的 `net_zcopy_get()`。重复调用会使 `uarg->refcnt` 过早降至零,在 TX skb 仍持有有效的 `destructor_arg` 指针时释放 `ubuf_info_msgzc`。KASAN 报告了对已释放 `ubuf_info_msgzc` 的 use-after-free: BUG: KASAN: slab-use-after-free in skb_release_data+0x77b/0x810 Read of size 8 at addr ffff88801574d3e8 by task poc/220 Call Trace: skb_release_data+0x77b/0x810 kfree_skb_list_reason+0x13e/0x610 skb_release_data+0x4cd/0x810 sk_skb_reason_drop+0xf3/0x340 skb_queue_purge_reason+0x282/0x440 rds_tcp_inc_free+0x1e/0x30 rds_recvmsg+0x354/0x1780 __sys_recvmsg+0xdf/0x180 Allocated by task 219: msg_zerocopy_realloc+0x157/0x7b0 tcp_sendmsg_locked+0x2892/0x3ba0 Freed by task 219: ip_recv_error+0x74a/0xb10 tcp_recvmsg+0x475/0x530 发生延迟访问的 skb 仍然通过 `pskb_carve_inside_nonlinear()` 复制而来的 `shinfo->destructor_arg` 引用同一个 uarg,但未增加引用计数。已验证该漏洞可被可靠利用:一个有效的概念验证(PoC)可在默认内核配置下,由非特权本地用户实现完整的 root 权限提升。 该修复遵循了 `pskb_expand_head()` 的模式,后者具有相同的 memcpy/克隆结构。对于 `pskb_carve_inside_header()`,`net_zcopy_get()` 被放置在 `skb_orphan_frags()` 成功之后,因此孤儿错误路径无需清理。对于 `pskb_carve_inside_nonlinear()`,`net_zcopy_get()` 被放置在所有失败点之后、`skb_release_data()` 之前,因此任何错误路径都无需清理——这与 `pskb_expand_head()` 更为接近,并避免了需要平衡的 `net_zcopy_put()`。
来源
1这是CVE-2026-52943的Linux内核本地权限提升PoC代码,这是skbuff.c中的释放后使用漏洞,是我在Linux内核中发现的第一个0day。
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。