🔥 CVE-2026-43500 深度独立研究:源码审计 · 二次发现 · 利用方案

🔥 高危漏洞深度独立研究 · CVSS ≥ 9.8

CVE-2026-43500 深度独立研究:源码审计 · 二次发现 · 利用方案

📊 4 来源🔍 源码审计🧪 PoC
NVD-LatestPoC-in-GitHubExploit-DB-RSSQualys Security Blog

🔍 源码独立审计

https://github.com/V4bel/dirtyfrag 源码进行独立审计(置信度 72%)。

🧬 根因独立理解

在 rxrpc_input_call_event() 处理 DATA 包和 rxrpc_verify_response() 处理 RESPONSE 包时,线性化/复制 skb 的 gate 条件仅检查 skb_cloned()。该条件不完整:一个 skb 即使 skb_cloned() 为假,仍可能通过 splice() 等机制持有外部所有的 shared frag(SKBFL_SHARED_FRAG),或通过 skb_has_frag_list() 包含分片链。此类 skb 会落入 in-place 解密路径,调用 skb_to_sgvec() 将 frag pages 直接绑定到 AEAD/skcipher SGL,使得解密操作直接作用于共享页面。由于页面归外部所有(如用户文件页),解密时的写操作(如 XOR/authentication)会修改这些页面内容,造成数据破坏或信息泄露。补丁将 gate 扩展为 skb_cloned() || skb_has_frag_list() || skb_has_shared_frag(),强制 unshare 后再解密,避免操作外部共享页。

🛤️ 漏洞触发链路

攻击者首先通过 splice() 将一个 memfd/file 页映射到 UDP socket 的 skb,形成带 SKBFL_SHARED_FRAG 的 skb;或构造 frag_list 链。随后该 skb 作为 rxrpc DATA/RESPONSE 包发送至目标。rxrpc 接收路径在 rxrpc_input_call_event()/rxrpc_verify_response() 中检查条件,因 skb_cloned() 为 false,跳过线性化复制,直接进入安全操作解密的 in-place 路径。skb_to_sgvec() 将共享页地址填入 SGL,AEAD/skcipher 在 DMA 或 CPU 访问下对共享页执行写操作,导致外部页面内容被篡改。若页面同时映射到攻击者控制的进程,则能观测或影响解密结果,进一步利用可破坏内核完整性或泄露敏感数据。

🔁 二次发现(同类漏洞/扩展攻击面)

  • net/rxrpc/input.c - rxrpc_input_call_event() 与 net/rxrpc/security.c - rxrpc_verify_response(): 这两个函数是直接修复点,但其他调用安全 ops 或 skb_to_sgvec() 的解密路径可能存在相同遗漏,需审计所有 rxrpc 数据包处理流程。
  • net/ipv4/udp.c / net/ipv6/udp.c - UDP 输入路径中类似 skb_cloned() 判断: UDP 中处理带共享 frag 的 skb 时若只查 cloned,可能绕过 unshare,同样导致 skb_to_sgvec() 绑定外部页。
  • net/ipsec/esp4.c / esp6.c - ESP 输入解密前线性化判断: IPsec 栈在解密 skb 时也可能忽略 shared_frag/frag_list,存在同类的页修改风险。

🩹 修复完整性分析

当前补丁将判断条件扩展为同时检查 skb_has_frag_list() 和 skb_has_shared_frag(),覆盖了描述中提到的两类遗漏场景,逻辑上比原代码完整。但仍需确认:1) unshare 操作是否对所有 frag 类型都执行了完整复制(如 skb_linearize 是否处理 head_frag);2) 是否有其他入口(如 fast path 或批处理)会绕过该 gate;3) 条件判断后是否可能因竞态导致共享页在 unshare 与解密之间被重新引入。若这些点未同步处理,理论上仍存在绕过空间。整体修复方向正确,但需结合具体实现与调用上下文进一步验证。

⚔️ 利用方案设计

利用方案核心是构造带外部共享页的 skb,使 rxrpc 解密时操作攻击者可控页面。步骤:1) 通过 memfd_create 或打开可写文件,映射到用户空间,取得页面控制权;2) 使用 splice() 将文件页以零拷贝方式写入 UDP socket,形成 SKBFL_SHARED_FRAG 的 skb,并注入 rxrpc 数据头(作为 DATA 或 RESPONSE);3) 发送至目标机,使 rxrpc 接收路径进入 in-place 解密,且 skb_cloned() 为 false,绕过 unshare;4) 解密过程通过 skb_to_sgvec() 将共享页作为 SGL 输出/输入缓冲,AEAD/skcipher 写操作会修改页面;5) 通过修改共享页内容,干扰解密结果,例如破坏认证标签或密文,进而推测密钥流,或导致 rxrpc 状态机内部数据被污染。更进阶可结合页面复用(page allocator)将受控页用于内核其他模块,实现提权或 LPE。关键 payload 设计在于精心构造 rxrpc 包头长度与 frag 偏移,使其与解密 SGL 对齐,从而精确覆盖目标字节。

🧪 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-04 12:02

[!] CONTACT_CHANNELS

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

> PING_AUTHOR (@A1RedTeam)