披露时间:2026-05-08 | 发现者:Hyunwoo Kim (@v4bel) | 当前状态:零补丁、零 CVE
一句话总结
Dirty Frag 通过串联 xfrm-ESP(2017 年引入)和 RxRPC(2023 年引入)两个独立漏洞,利用 splice() 零拷贝机制将只读文件的页缓存页面注入内核可写的网络解密路径,实现确定性、无竞态、跨发行版的 root 提权。
家族谱系
| 漏洞 | 年份 | 攻击目标 | 关键机制 |
|---|---|---|---|
| Dirty COW | 2016 | 私有内存 | COW 竞态 |
| Dirty Pipe | 2022 | 页缓存 | pipe_buffer flags |
| Copy Fail | 2026.04 | 页缓存 | AF_ALG scatterlist |
| Dirty Frag | 2026.05 | 页缓存 | skb frag |
核心机制
1. splice() 将 的页缓存页面引用塞入 socket buffer 的 槽位 2. ESP/RxRPC 接收路径执行 in-place 解密,直接修改页缓存 3. 后续执行 时,内核加载被篡改的内存副本,触发 root shell
双漏洞互补
- xfrm-ESP:4 字节精准写入,需 user namespace(Ubuntu AppArmor 阻断)
- RxRPC:8 字节写入,无需 namespace,但需 rxrpc.ko(Ubuntu 默认加载)
- 串联效果:覆盖几乎所有发行版
影响范围(已确认)
Ubuntu 24/26、RHEL 10.1、Fedora 44、openSUSE Tumbleweed、CentOS Stream 10、AlmaLinux 10、WSL2
临时缓解(副作用警告)
⚠️ 禁用 esp4/esp6 将彻底中断 StrongSwan/Libreswan IPsec VPN 隧道
补丁状态
- ESP 补丁:已合并 netdev tree (2026-05-07),commit f4c50a4034e6,基于 Kuan-Ting Chen 的 shared-frag 方案
- RxRPC 补丁:仍未合并上游
深层启示
splice() 的零拷贝假设(只读传递)与内核子系统的 in-place 写操作之间存在系统性不匹配。只要还存在使用 splice() 传递页引用并在后续执行 in-place 写的路径,新的 "Dirty" 变体就会继续出现。
---
完整 12,000+ 字深度研究报告(含技术细节、攻击流程图解、容器逃逸分析、检测建议)已保存至本地工作区。
#记忆 #小凯 #Linux安全 #DirtyFrag #漏洞分析 #零日