Dirty Frag:Linux 内核零拷贝路径本地提权漏洞
链式组合 IPsec ESP 与 RxRPC 模块缺陷,所有主流发行版暂无补丁
韩国安全研究员 Hyunwoo Kim(@v4bel)公开披露了一个被命名为"Dirty Frag"的 Linux 内核本地权限提升漏洞。该漏洞允许普通用户无需密码即可获得系统最高权限(root),且目前 Ubuntu、RHEL、Fedora、openSUSE 等所有主流发行版均尚无可用补丁。PoC 已在 GitHub 公开,任何人均可通过单行命令完成编译并执行。
Dirty Frag 属于与 Dirty Pipe(CVE-2022-0847)和 Copy Fail 相同的漏洞类——零拷贝发送路径上的脏写入问题。具体机制:splice() 系统调用将攻击者只有读权限的 page cache 页直接钉入 struct sk_buff 的 frag 槽,而接收侧内核代码对该 frag 执行原地(in-place)加密/解密,导致只读 page cache 被写入。
💡 Dirty Frag 是确定性逻辑 bug,不依赖时间窗口,无需竞态条件,利用失败时内核不会 panic,成功率极高。
漏洞由两个独立模块的缺陷链式组合而成:
变体一:xfrm-ESP Page-Cache Write
利用 IPsec ESP 模块,影响范围约 9 年(自 2017 年 commit cac2661c53f3 起)。该变体提供类似 Copy Fail 的任意 4 字节 STORE 原语,可将 /usr/bin/su 替换为恶意程序。缺点是需要创建用户命名空间的权限,而 Ubuntu 的 AppArmor 策略有时会阻止非特权用户创建命名空间。
变体二:RxRPC Page-Cache Write
利用 RxRPC 协议模块,自 2023 年(commit 2dc334f1a63a)起受影响。该变体可清空 /etc/passwd 中 root 的密码字段,完全不需要任何特殊权限。缺点是 rxrpc.ko 模块本身在大多数发行版上默认不加载——但在 Ubuntu 上默认加载。
两个变体的限制互相覆盖:ESP 模块在大多数发行版上都可用(命名空间被阻止时,RxRPC 兜底),RxRPC 在 Ubuntu 上可用(ESP 命名空间被阻止时)。这使得单一攻击程序能在几乎所有主流 Linux 发行版上通用提权。
4月29-30日
向 security@kernel.org 提交漏洞和补丁
5月7日
向 linux-distros 提交,设定 5 天 embargo
5月7日
第三方抢先公开 exploit,embargo 被打破
上游已合并
ESP 模块修复补丁(RxRPC 尚未)
• Ubuntu 24.04.4(6.17.0-23-generic)
• RHEL 10.1(6.12.0-124.49.1.el10_1)
• openSUSE Tumbleweed(7.0.2-1-default)
• CentOS Stream 10 / AlmaLinux 10
• Fedora 44(6.19.14-300.fc44)
⚠️ 在补丁发布前,禁用相关内核模块
在 /etc/modprobe.d/ 下创建黑名单文件,阻止 esp4、esp6、rxrpc 三个模块加载,并立即卸载已加载的模块。此操作对不使用 IPsec 或 AFS(Andrew File System)的普通服务器无功能影响。
写在最后
Dirty Frag 再次暴露了内核零拷贝路径中的深层隐患。从 2022 年的 Dirty Pipe 到 2024 年的 Copy Fail,再到今天的 Dirty Frag,同类 bug 反复出现在 splice/sendfile 这条代码路径上。对于运维人员来说,在补丁发布前禁用相关模块是最直接的防护手段。
来源:oss-security@openwall.org · GitHub