🔥 CVE-2026-43500 深度独立研究:源码审计 · 二次发现 · 利用方案
CVE-2026-43500 深度独立研究:源码审计 · 二次发现 · 利用方案
🔍 源码独立审计
对 https://github.com/V4bel/dirtyfrag 源码进行独立审计(置信度 90%)。
🧬 根因独立理解
漏洞根因位于 Linux 内核 rxrpc 协议栈的包处理路径中。在 rxrpc_input_call_event() 函数处理 DATA 包以及 rxrpc_verify_response() 函数验证 RESPONSE 包时,代码调用 skb 是否需要线性化的判断条件是:if (skb_cloned(skb)) skb_linearize(skb); 该条件仅检查 skb 是否被克隆。然而,SKB 未克隆时仍可能携带外部拥有的分页片段:SKBFL_SHARED_FRAG 标志(由 splice() 将 pipe_buffer 关联到 UDP socket 时经 __ip_append_data() 设置)或 chained skb_has_frag_list() 结构(分段发送的 SKB 链)。这两种情况未被 gate 覆盖,导致程序走入 in-place 解密路径,调用 skb_to_sgvec() 将分页片段直接绑定到 AEAD/skcipher SGL。由于这些分页片段可能被多个 SKB 或用户空间引用(SKBFL_SHARED_FRAG),解密过程会就地修改共享页,引发数据竞争、内存破坏或越权读取。补丁将 gate 扩展为 `if (skb_cloned(skb) || skb_has_frag_list(skb) || skb_has_shared_frag(skb)) skb_linearize(skb);`,从而在调用安全操作前强制所有非法分页 SKB 线性化,阻断共享页绑定。
🛤️ 漏洞触发链路
攻击者通过 UDP socket 与 AF_RXRPC socket 关联(如使用 socketpair 或路由),向内核注入精心构造的 RX 数据包。可先通过 splice() 将 pipe buffer 引用页粘附到 UDP skb,设置 SKBFL_SHARED_FRAG;或构造分片发送使 skb_has_frag_list() 为真。该 skb 进入 rxrpc_input_call_event() 或 rxrpc_verify_response() 后,由于 skb_cloned() 为 false,绕过 linearize 分支,进入 rxrpc_secure_packet()/rxrpc_verify_packet() 的解密/校验逻辑。rxrpc 直接调用 skb_to_sgvec() 将 SKB 的分页片段地址写入 SGL,密码学操作(如 skcipher_walk)会就地读写这些共享页。攻击者可观察或篡改页内容,导致机密性破坏(读取解密后的明文)、完整性破坏(修改未认证密文)或内核堆信息泄露。若共享页来自用户空间,攻击者可与其读端同步制造条件竞争,内核读写用户可控页,最终可能提权。
🔁 二次发现(同类漏洞/扩展攻击面)
- rxrpc_input_packet() / rxrpc_data_read(): 同样的 skb_cloned() 单独判断存在于其他 RX 数据接收路径。若这些路径也调用 skb_to_sgvec() 进行加解密或哈希,则同样可能被共享分页绕过。
- rxrpc_secure_data_on_send() / rxrpc_skb_from_pipe(): 发送侧若未对 splice() 产生的共享分页 SKB 做线性化或复制,也可能把用户页直接绑定到 tx SGL,导致内核读写用户映射页。
- net/rxrpc/conn_security.c 中的 rxrpc_do_encrypt/decrypt: 底层安全操作在构建 SGL 前没有统一校验 frag 所有权,任何调用方传入带 SHARED_FRAG 的 skb 都会触发同类问题。
🩹 修复完整性分析
当前补丁扩展了 gate 条件,覆盖 skb_has_frag_list() 和 skb_has_shared_frag(),在大方向上修复了已知路径。但仍需注意:1) 补丁只用于 DATA 和 RESPONSE handler,其他 rxrpc 包类型(ACK、ABORT、CHALLENGE)若同样进入安全 ops 且允许 splice 注入,仍存在风险;2) 未处理 skb 可能同时满足 skb_cloned() 但已被 unshare 后仍保留共享 frag 的情况(虽然线性化会清理);3) 若 skb_has_shared_frag() 宏检查仅在 frag 页上,而 head data 中包含外部映射页则可能漏检;4) 修复在调用 skb_linearize() 前未强制 `skb_orphan_frags`,对某些 loopback 场景可能仍保留页引用;5) 未来的 rxrpc 代码路径可能直接构造 skb 并绕过此 gate,因此应确保所有安全操作统一经过预检查接口。整体修复有效,但需全局审计。
⚔️ 利用方案设计
利用方案围绕构造一个未克隆但携带共享分页片段的 UDP skb,并使其作为 rxrpc DATA/RESPONSE 包进入 in-place 解密路径。关键步骤:1) 使用 socket(AF_INET, SOCK_DGRAM) 创建 UDP 套接字,通过 setsockopt 将其与 AF_RXRPC 关联或利用内核路由将本地发送包导入 rxrpc 协议处理(实际利用需结合 UDP 隧道或环回);2) 使用 splice() 将 tube buffer 中的匿名页注入到发送 skb,使 SKBFL_SHARED_FRAG 置位;3) 构造恶意 rxrpc DATA 包,设置 header 使 skb 被投递到 rxrpc_input_call_event()(例如伪造 call_id 和 seq);4) 控制 UDP payload 大小以触发分片或 frag_list,确保 skb_has_frag_list() 为真;5) 利用共享页: - 信息泄露:通过 splice 只读共享页,当内核解密写入同一页时,用户态可读到明文; - 写竞争:splice 写入端持续修改共享页,使内核 SGL 中的源/目标页发生改变,破坏 skb_to_sgvec 后的页表映射,造成 UAF/越界写; - 提权:若页来自其他内核对象(如设备页),可修改其内容或触发 double-free。由于修复前 gate 只看 skb_cloned(),攻击者可避免克隆(防止 skb_cloned 设置),但通过 splice 共享 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-03 12:01