🎯 CVE-2026-43500 深度技术分析:漏洞根因 · PoC/EXP · 检测指纹

🎯 CVE 全聚合深度分析

CVE-2026-43500 深度技术分析

📊 聚合 4 来源🧪 含 PoC
NVD-LatestPoC-in-GitHubExploit-DB-RSSQualys Security Blog

摘要:CVE-2026-43500 是 Linux 内核 rxrpc(AF_RXRPC)协议栈中的一个高危安全漏洞,CVSS 评分为 7.8(High)。该漏洞由 rxrpc 数据包处理路径中不完整的“unshare(解除共享)”检查引起,攻击者可利用 splice() 系统调用构造携带共享页片段(shared page frags)的 UDP 套接字缓冲区,绕过仅基于 skb_cloned() 的线性化防线,使 rxrpc 安全解密操作在外部共享的页面上就地执行,最终可能导致本地权限提升、任意文件修改或内核内存破坏。截至本文撰写时,该漏洞尚未被 CISA KEV 收录,但在 GitHub 上已有概念验证(PoC)利用与缓解脚本出现。

📌 漏洞概述

CVE 标识:CVE-2026-43500
CVSS 评分:7.8(High)
漏洞类型:本地权限提升 / 内存破坏(Improper Handling of Shared Fragments)
受影响产品:Linux 内核(rxrpc 协议实现)

该漏洞出现在 Linux 内核的 RxRPC 协议处理代码中。rxrpc_input_call_event() 函数处理接收到的 DATA 报文,rxrpc_verify_response() 处理响应报文。两者在进入安全层(security ops)之前,需要对 skb 进行必要的线性化和私有化处理,以避免在解密或认证过程中修改到被共享的内存页。原有逻辑只判断了 skb_cloned(),缺少对 skb_has_frag_list()skb_has_shared_frag() 的检测,导致某些本应被复制的 skb 被直接送入就地解密路径。

该漏洞可被本地攻击者低复杂度利用,实现权限提升或破坏内核共享页内容。由于它需要通过 AF_RXRPC 套接字触发特定报文处理流程,攻击者需具备创建 rxrpc 套接字的能力(通常与 CAP_SYS_ADMIN 或用户命名空间配置有关,但在某些发行版配置中普通用户也可访问该协议栈)。

🔬 漏洞根因分析

内核中的网络缓冲区 struct sk_buff 通常通过片段页(frag pages)引用数据页面,而不是复制实际数据。在需要执行加密、解密、认证等操作时,内核会把 skb 的数据区域映射为 SG(Scatter-Gather)列表,交给 AEAD 或 skcipher 算法进行就地处理。这意味着算法会直接读写这些被引用的物理页,因此要求这些页必须是当前 skb 独享的,绝不能被其他上下文共享。

原本的保护机制是检查 skb_cloned()。如果该标志被置位,说明 skb 结构本身被克隆,存在多个引用者,于是代码会将 skb 线性化(linearize)并复制数据,防止修改影响到其他持有者。然而,数据结构层面的共享并不是唯一共享方式。现实中的报文可能通过以下途径携带外部共享页:

  • SKBFL_SHARED_FRAG:当用户调用 splice() 将文件页或管道页直接附着到 UDP 套接字发送缓冲时,__ip_append_data() 会设置 SKBFL_SHARED_FRAG 标志。这些页并不归 skb 所有,而是由文件页缓存或管道缓冲区持有。
  • skb_has_frag_list():一个聚合 skb 可能包含子 skb 链表(frag_list),每个子 skb 又可能拥有自己的片段页。即使顶层 skb 没有被克隆,其子 skb 中的片段页仍可能是外部共享的。

漏洞代码只检查了 skb_cloned(),而没有检查上述两种共享页情况。当攻击者精心构造一个 skb,使 skb_cloned() 为假(即 skb 本身没有被克隆),但 frag 页实际由文件系统或另一个进程共享时,rxrpc 的解密路径就会把 skb_to_sgvec() 得到的页面直接作为输出缓冲区。密文在解密后会被写入这些共享页,直接覆盖页中原有的数据。

这种“就地解密不可变页”的问题后果极为严重:如果共享页是只读文件(如磁盘上的二进制文件)的页缓存,攻击者可以修改文件内容;如果页属于另一个进程的私有映射,攻击者可以改写该进程的内存数据;如果页被投射为内核映像的一部分(例如某些零页或只读页),甚至可能引发内核灾难性故障。利用该原语,攻击者可以实现完全覆盖任意只读内容,再结合其他技术即可完成本地提权。

修复补丁将 unshare 判断条件扩展为:

if (skb_cloned(skb) || skb_has_frag_list(skb) || skb_has_shared_frag(skb))

这样便覆盖了通过 splice 进入的循环回传向量以及其他共享页来源,同时保留了对于内核私有页(如 NIC page_pool、GRO)的零拷贝快速路径。补丁并未新增错误处理,而是复用了原有的 OOM 和跟踪逻辑,因此改动风险较低。

💥 影响与危害

CVE-2026-43500 的核心危害在于一个本地攻击者能够篡改本不可写的共享页面,从而破坏内核或系统的完整性。具体影响包括:

  • 本地权限提升:攻击者可以修改正在运行的 setuid 程序或系统服务的二进制映像,或覆盖关键内核数据结构,进而获得 root 权限。
  • 任意文件篡改:通过 splice 共享文件页,解密时会改写文件页缓存中的内容。即使文件以只读方式打开,页缓存的内容依然会被改变,最终同步回磁盘,导致系统被持久化植入恶意代码。
  • 内核内存破坏:若攻击者能够控制共享页指向敏感内核区域(例如通过某些页池碰撞),可能直接写坏内核数据,引发拒绝服务或完全控制内核。
  • 完整性破坏:任何依赖页缓存完整性校验的机制(如完整性度量架构 IMA、dm-verity)都可能被绕过,因为漏洞发生在页缓存层以下。

由于该漏洞由本地攻击者触发,不需要远程网络交互,配合现代内核默认开启的组件(尤其是可用用户命名空间环境),实际攻击门槛较低。尽管目前尚未被 CISA KEV 收录,也没有公开发的 EXP,但 GitHub 上已有 PoC 仓库以及相关的缓解脚本,说明该漏洞已进入攻击者的研究视野。

🛡️ 修复与缓解

官方补丁:Linux 内核上游已修复该问题。修复提交扩展了 rxrpc 中 unshare 的判断条件,在 skb_cloned() 的基础上增加了 skb_has_frag_list()skb_has_shared_frag() 的检测。各发行版(Debian、Ubuntu、RHEL 等)会通过安全公告发布对应的内核更新补丁,用户应尽快升级至修复版本。

临时缓解措施:

  • 禁止加载 rxrpc 模块:如果系统不需要使用 AF_RXRPC 协议,可通过模块黑名单阻止 rxrpc 内核模块加载。例如在 /etc/modprobe.d/dirtyfrag.conf 中写入:
install rxrpc /bin/false

这一做法能够直接封堵漏洞入口,也是 GitHub 上 dirty_frag_mitigation 脚本的核心思路。该脚本还会同时禁用 esp4esp6 模块,因为它们与共享 frag 的同类问题有关(如 fragnesia),属于同类攻击面的额外加固。

  • 限制 unshare/用户命名空间:部分攻击路径可能依赖于用户命名空间获取 rxrpc 套接字权限,通过 sysctl 参数 kernel.unprivileged_userns_clone=0 或 seccomp 策略阻止非特权用户创建新命名空间,可降低可利用性。
  • 监控与审计:关注内核日志中 WARN_ON_ONCEskb_warn_bad_offload 等异常输出,以及模块加载事件。系统行为若有可疑的只读文件修改或内存写入模式,应及时隔离排查。
  • 更新安全基线:由于该漏洞与 DP: 共享页的快速路径强相关,运维团队应将内核版本更新加入月度维护周期,并关注供应商提供的实时补丁(Live Patch)服务。

总之,CVE-2026-43500 再次提醒我们:网络报文处理中的“零拷贝”优化必须仔细甄别页面的所有权与共享状态。仅检查 skb 结构层的克隆标志远远不够,必须全面考虑 frag 页的共享来源,并确保加密路径只触碰私有页面。用户应及时应用内核补丁,并在未修复前采取模块级缓解措施降低风险。

🧪 PoC 复现

从 GitHub 公开仓库抓取的实际 PoC 代码(仓库)。

📋 代码元数据语言md来源vorkampfer/dirty_frag_mitigation针对性✅ 已验证与漏洞相关(代码含 CVE 引用)依赖见代码注释/README用法详见代码注释中的使用说明

# dirty_frag_mitigation
1. A bash script for mitigating  linux dirty frag exploit CVE-2026-43500
2. Works on all Debian/Ubuntu Arch based platforms i.e. Kali,ParrotSec,
BlackArch
3. Added --check to run as non-root user. Added fragnesia support as it shares the same patch surface with dirtyfrag.

## Example usage:
```
ᐅ dirty_frag_fix.sh --check
[*] Checking dirtyfrag mitigation status (non-root check mode)...
[*] Config file: /etc/modprobe.d/dirtyfrag.conf
[*] install esp4 /bin/false: yes
[*] install esp6 /bin/false: yes
[*] install rxrpc /bin/false: yes
[*] Any vulnerable modules currently loaded: no
[+] Likely mitigated against dirtyfrag based on module blocklist and load state.
[*] Note: This same module-level mitigation also reduces fragnesia exposure on the same ESP/XFRM surface.
[*] Note: Fragnesia is a separate bug with its own patch,
but shares mitigation surface with dirtyfrag.

⚔️ EXP 利用代码

截至分析时,Exploit-DB 未收录该 CVE 的公开利用代码。可利用上述 PoC 进行验证,或关注 Exploit-DB 更新。

🕵️ 检测指纹

当前规则库未收录针对该 CVE 的专用检测规则。建议:

  • 根据漏洞根因编写 Nuclei 检测模板
  • 在 WAF/IDS 中配置针对漏洞特征的规则
  • 关注漏洞指纹库更新

🤖 本文由漏洞情报系统自动聚合生成 · 2026-08-09 13:50 · 数据源: NVD/GitHub-Advisory/OSV/CISA-KEV/Exploit-DB/PoC-in-GitHub + 检测规则库

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)