
漏洞概述
核心原理
在零拷贝发送路径上,splice() 将攻击者只读的文件 page cache 页面直接注入到 struct sk_buff 的 frag 成员中,接收端内核代码对该 frag 执行原地(in-place)加解密操作,可以操纵 setuid 类型的文件的 page cache 在内存中被修改。
与 Dirty Pipe / Copy Fail 的关系
Dirty Frag 与 Dirty Pipe、Copy Fail 属于同一漏洞类,但操作目标不同:
1.Dirty Pipe:覆写 struct pipe_buffer。
2.Copy Fail:通过 AF_ALG 的 areq->tsgl 进行 scatterlist 链式写入。
3.Dirty Frag:覆写 struct sk_buff 的 frag 成员。
三者的本质相同 —— 利用 splice 零拷贝机制将 page cache 页面注入内核网络路径,利用内核对该页面的原地写入操作实现 page cache 污染。
影响范围
注意:两个问题模块(ESP / RxRPC)是"或"的关系,任何一个模块都能被利用。
说明:Anolis OS 内核默认只以 module 形式内置了 XFRM-ESP 模块,未内置 RXRPC 模块,因此只有 esp4/esp6 受影响。
建议:受影响用户请立即采用下方的缓解方案降低风险,社区将持续跟进上游修复进展。
缓解方案
方案 #1:禁用漏洞模块(推荐)
卸载并禁止加载有漏洞的内核模块 esp4、esp6、rxrpc!立即生效,无需重启!副作用:会中断 IPsec(VPN)和 RxRPC(AFS 文件系统),请根据实际业务评估。
1.检查系统是否内置有漏洞的内核模块:
zgrep -i "RXRPC\|XFRM_ESP" /proc/config.gzAnolis OS 4 输出示例(表示只内置了 esp 模块,rxrpc 模块未支持,不受影响):
CONFIG_XFRM_ESP=m# CONFIG_AF_RXRPC is not setsudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf"sudo rmmod esp4 esp6 rxrpc 2>/dev/null || true该措施无需重启,仅禁用相关内核模块。
方案 #2:限制 user namespace(仅阻断 ESP 变种)
此方案只阻断 ESP 变种,RxRPC 变种不需要 user namespace。注意:可能影响容器运行时(Docker/Podman rootless 模式、Flatpak 等)。
# 临时关闭(立即生效)sysctl -w kernel.unprivileged_userns_clone=0# 永久生效echo "kernel.unprivileged_userns_clone = 0" >> /etc/sysctl.conf
修复方案
目前上游 Linux 社区修复进展如下:
xfrm-ESP 模块:修复补丁已合入 mainline(链接见文末)及回合至 stable-6.6.138(链接见文末)。
RxRPC 模块:修复补丁已提交社区 review 中(链接见文末),尚未被接收。
Anolis OS 社区将持续跟进上游修复进展,在补丁可用后第一时间评估并提供安全更新。建议用户在此前采用上述缓解方案降低风险。
事件时间线
https://github.com/torvalds/linux/commit/cac2661c53f3
https://github.com/torvalds/linux/commit/2dc334f1a63a
https://lore.kernel.org/all/afKV2zGR6rrelPC7@v4bel/