Dirty Frag:又一个 Linux 通用提权,这次连补丁都没有

· 2026-05-08 09:56 · 3 阅读

bitbot 2026-05-08 09:56 北京

Dirty Frag:又一个 Linux 通用提权,这次连

2026 年 5 月 8 日,安全研究员 Hyunwoo Kim 在 oss-sec 邮件列表公开了一个名为 Dirty Frag 的 Linux 通用本地提权漏洞(LPE)。影响范围覆盖所有主流发行版,普通用户可直接提权到 root。

更炸裂的是:因为禁令被打破,目前没有任何补丁和 CVE。完整 exploit 已公开。

这是什么漏洞?

Dirty Frag 和之前的 Copy Fail 一样,都是利用 Linux 内核 page cache 原地修改 实现任意文件覆写。攻击者可以让内核在内存中修改一个只读文件的内容,而这个修改对后续所有读取该文件的进程都生效。

漏洞链式利用了两个独立的内核 bug:

XFRM/ESP 子系统的 page cache 污染 — 通过 IPsec ESP 协议的解密路径,让内核对文件的 page cache 执行原地解密操作 

rxrpc/rxkad 子系统的 page cache 污染 — 通过 AFS/RxRPC 协议的包验证路径,对文件 page cache 执行 pcbc(fcrypt) 原地解密 

核心机制:内核以为自己在解密网络数据包,实际上是在修改文件的内存页面。

漏洞原理深度解析

核心原语:Page Cache 原地修改

Linux 的 page cache 是文件在内存中的缓存。正常情况下,读取文件会先查 page cache,如果命中就直接返回缓存数据。

Dirty Frag 的攻击原语是:在不触发写回(writeback)的前提下,修改 page cache 中的数据。这意味着:

 修改只存在于内存中,磁盘上的文件不变 

 但所有后续的 read() 调用都会读到被篡改的数据 

 对 setuid 程序特别有效:内核从 page cache 加载 ELF 时,加载的就是被篡改的版本 

漏洞一:XFRM/ESP 路径

利用 vmsplice() + splice() 系统调用,将文件页面注入 ESP(IPsec Encapsulating Security Payload)的解密路径。

关键步骤:

 创建 user namespace + net namespace(无需特权) 

 在 netns 内建立 48 个 XFRM SA,每个控制 4 字节的解密输出 

 通过 splice() 将 /usr/bin/su 的对应偏移注入 ESP 处理管道 

 内核执行 XFRM 解密 → 原地覆写 page cache 

 /usr/bin/su 的 page cache 被替换为 192 字节的 root-shell ELF 

 执行 su → 实际运行 shellcode → setgid(0); setuid(0); execve("/bin/sh") 

关键点:整个过程不需要写磁盘,只修改内存中的 page cache。传统的文件完整性检查(如 IMA/EVM)无法检测到这种攻击。

漏洞二:rxrpc/rxkad 路径(Ubuntu 备用方案)

当 ESP 路径受 sandbox 限制时,rxrpc 路径作为备用:

mmap 只读打开 /etc/passwd,固定其 page cache 

 离线暴力搜索 fcrypt 密钥 K_A, K_B, K_C — 使得解密后 root 行变成 "root::0:0:..." 

 三次内核触发(rxrpc splice trick),按 last-write-wins 顺序覆写 

 PAM pam_unix.so 的 nullok 选项接受空密码 → su - 获得 root shell 

暴力搜索的概率看起来很低,但 fcrypt 是 8 字节密钥,在现代 CPU 上暴力搜索速度可达 ~2M/s,几分钟内就能找到合适的密钥

192 字节的 Root Shell

ESP 路径注入的 payload 是一个 192 字节的极简 x86_64 ELF:

 // _start at 0x400078: xor edi, edi         // setgid(0) xor esi, esi xor eax, eax mov al, 0x6a         // __NR_setgid syscall mov al, 0x69         // __NR_setgid syscall mov al, 0x74         // __NR_setgroups syscall // ... execve("/bin/sh", NULL, ["TERM=xterm", NULL])     

整个 ELF 只有 192 字节,包含一个 PT_LOAD 段。先 setgid(0); setuid(0); setgroups(0, NULL) 提权,再 execve("/bin/sh") 获得 root shell。

Exploit 整体流程

DirtyFrag Chain (uid=1000 → root)

1. unshare(NEWUSER | NEWNET) → 获得 namespace

2. ESP 路径: 48个 SA + splice → su 被覆写

3. rxrpc 路径: 暴力搜索密钥 → passwd 被覆写

4. 任一目标被篡改 → spawn PTY → root shell

受影响范围

所有主流 Linux 发行版均受影响,因为漏洞存在于内核主线代码中:

 Ubuntu / Debian 

 RHEL / CentOS / Fedora 

 Arch Linux 

 SUSE / openSUSE 

 Android(部分内核配置) 

前置条件:需要 unprivileged user namespace 支持(大多数发行版默认开启)。

临时缓解措施

由于目前没有补丁,唯一的办法是禁用相关内核模块:

 sh -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"     

这条命令做了三件事:创建 dirtyfrag.conf 配置文件,让 esp4/esp6/rxrpc 模块无法加载,立即卸载已加载的模块。

注意:禁用 esp4/esp6 会影响 IPsec ESP 功能,禁用 rxrpc 会影响 AFS 文件系统。如果生产环境依赖这些功能,需要评估影响。

与 Copy Fail 的对比

特性

Copy Fail

Dirty Frag

攻击原语

page cache 覆写

page cache 覆写

攻击面

其他内核子系统

XFRM/ESP + rxrpc

提权效果

uid → root

uid → root

补丁状态

已有补丁

无补丁

利用可靠性

高(双路径 fallback)

Dirty Frag 的危险程度比 Copy Fail 更高:双路径利用 + 无补丁 + 完整 exploit 已公开。

技术启示

1. Page Cache 一致性是老大难问题

Linux 的 page cache 设计假设是:文件内容在 mmap/read 期间不会被意外修改。但内核中存在多个子系统可以原地修改 page cache 页面(XFRM 解密、rxrpc 验证等),这些修改路径没有经过正确的权限检查。

2. Namespace 是双刃剑

User namespace 让非特权用户可以创建网络命名空间并操作 XFRM/rxrpc 子系统。这大大扩展了攻击面。禁用 unprivileged user namespace(sysctl user.max_user_namespaces=0)可以阻断利用链,但会影响容器运行时。

3. Setuid 程序的安全假设被打破

传统安全模型假设 setuid 程序的二进制文件在磁盘上是可信的。但 Dirty Frag 不修改磁盘文件,只修改内存中的 page cache,绕过了文件完整性检查(如 IMA/EVM)。

4. 负责人披露的困境

这次事件中,禁令被打破导致漏洞在没有补丁的情况下公开。攻击者现在有了完整的 exploit,而防御者只能靠禁用模块来临时缓解。

检测建议

虽然目前没有补丁,但可以通过以下方式检测潜在利用:

监控 modprobe 日志:关注 esp4、esp6、rxrpc 模块的加载事件 

审计 user namespace 使用:auditd 规则监控 unshare 系统调用 

检查 modprobe.d 目录:确认是否有 dirtyfrag.conf 缓解措施 

HIDS 文件完整性:虽然无法阻止 page cache 攻击,但可以检测异常进程树 

写在最后

Dirty Frag 再次证明了 Linux 内核安全的复杂性。一个看似无害的网络协议处理路径,结合 page cache 的设计缺陷,就能实现可靠的本地提权。

目前唯一能做的就是立即应用缓解措施,禁用 esp4/esp6/rxrpc 模块。等待内核开发者发布正式补丁后,再评估是否重新启用这些功能。

参考链接:

         ● oss-sec 原始披露         ● DirtyFrag.io 技术详情         ● XFRM 内核 commit         ● rxrpc 内核补丁讨论

觉得有用?点个赞支持一下

收藏本文,下次用得上

跳转微信打开