Dirty Frag 是一个新披露的、CVE 待定的 Linux 内核本地权限提升(LPE)漏洞,通过串联两个独立的页缓存写入缺陷——xfrm-ESP 页缓存写入和 RxRPC 页缓存写入——实现在几乎所有主流 Linux 发行版上获取 root 权限。该漏洞在 2026 年 5 月 7 日 embargo 破解后,已有公开漏洞利用程序在野外传播。
Dirty Frag 与 Dirty Pipe 和 Copy Fail(CVE-2026-31431)属于同一漏洞类别,但针对的是内核 struct sk_buff 的 frag 成员,而非 struct pipe_buffer。
该漏洞由安全研究员 Hyunwoo Kim(@v4bel)发现并报告,其利用了零拷贝发送路径:splice() 会将对只读页缓存页面(如 /etc/passwd 或 /usr/bin/su)的引用植入发送端 skb 的 frag 插槽中。
Dirty Frag Linux 漏洞接收端内核代码随后直接在该 frag 上执行原地加密操作,永久修改 RAM 中的页缓存。
即使未授权攻击者仅被授予读取权限,后续对该文件的所有读取操作都会看到被篡改的版本。
与竞争条件类漏洞不同,Dirty Frag 是一个确定性逻辑缺陷:无需时间窗口、失败时不会导致内核崩溃,且成功率极高。
Dirty Frag Linux 漏洞利用xfrm-ESP 页缓存写入存在于 esp_input() 中,即 IPsec ESP 接收路径。当 skb 为非线性但缺少 frag 列表时,代码会跳过必需的 skb_cow_data() 缓冲区分配步骤,直接对攻击者植入的 frag 执行原地 AEAD 解密。
通过 XFRMA_REPLAY_ESN_VAL netlink 属性,攻击者可控制每次存储操作的位置(文件偏移量)和值(4 字节),从而将静态 root shell ELF(192 字节,分 48 个 4 字节块写入)覆盖到 /usr/bin/su 的页缓存中。
后续会返回认证失败(-EBADMSG),但页缓存写入操作已持久化。此变体要求具备创建用户命名空间的能力(unshare(CLONE_NEWUSER))。
RxRPC 页缓存写入存在于 rxkad_verify_packet_1() 中,该函数对 RxRPC 负载的前 8 字节执行原地单块 pcbc(fcrypt) 解密。
由于 skb_to_sgvec() 直接将 splice 锁定的页缓存页面转换为 SGL,攻击者控制的页面同时成为 src 和 dst。
8 字节存储值为 fcrypt_decrypt(C, K),其中 K 是通过 add_key("rxrpc", ...) 注册的可自由指定会话密钥——此操作完全无需特权。
攻击者在用户空间暴力破解 K,直至生成所需明文(例如将 /etc/passwd 第 1 行的密码字段置为空字符串),从而绕过 PAM nullok 认证。
单一漏洞均无法覆盖所有 Linux 环境:
ESP 变体:在多数发行版可用,但需创建用户命名空间——部分 Ubuntu 配置通过 AppArmor 策略阻止此操作。RxRPC 变体:无需命名空间特权,但 rxrpc.ko 在 RHEL 10.1 等多数发行版默认缺失——却会在 Ubuntu 上随系统安装并自动加载。串联两个漏洞利用可消除所有盲点,实现在几乎所有主流发行版上提权至 root。该漏洞利用程序首先尝试 ESP 路径;若 unshare(CLONE_NEWUSER) 失败,则自动回退至针对 /etc/passwd 的 RxRPC 路径。
受影响发行版及内核版本ESP 漏洞自提交 cac2661c53f3(2017 年 1 月)起存在,RxRPC 缺陷自 2dc334f1a63a(2023 年 6 月)起存在,使该漏洞链的有效影响窗口长达约 9 年。已确认受影响的发行版包括:
Ubuntu 24.04.4(内核 6.17.0-23-generic)RHEL 10.1(内核 6.12.0-124.49.1.el10_1.x86_64)openSUSE Tumbleweed(内核 7.0.2-1-default)CentOS Stream 10(内核 6.12.0-224.el10.x86_64)AlmaLinux 10(内核 6.12.0-124.52.3.el10_1.x86_64)Fedora 44(内核 6.19.14-300.fc44.x86_64)用于确保 splice 锁定页面始终通过 skb_cow_data() 的 SKBFL_SHARED_FRAG 标志修复方案——已于 2026 年 5 月 7 日合并至 netdev 树。
最终合并的补丁基于 Kuan-Ting Chen 提交的共享 frag 方案。RxRPC 补丁(通过向现有 skb_cloned() 门控添加 || skb->data_len 以强制隔离非线性 skb)目前尚未合并至上游。
截至发布时,由于 2026 年 5 月 7 日第三方提前破解 embargo,两个缺陷均未分配 CVE 编号。
即时缓解措施由于发行版级补丁尚未可用,管理员应立即通过以下命令禁用受影响的内核模块:
bashsh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"此操作将黑名单并卸载 esp4、esp6 和 rxrpc 模块,以牺牲 IPsec 和 RxRPC 功能为代价。
依赖 IPsec VPN 隧道的系统应在应用此变通方案前谨慎评估运行影响,并在发行版回溯内核补丁可用后优先应用。
完整技术分析及 PoC 漏洞利用代码可在研究员的 GitHub 仓库获取。
本公众号所载文章为本公众号原创或根据网络搜索下载编辑整理,文章版权归原作者所有,仅供读者学习、参考,禁止用于商业用途。因转载众多,无法找到真正来源,如标错来源,或对于文中所使用的图片、文字、链接中所包含的软件/资料等,如有侵权,请跟我们联系删除,谢谢!