2026 年 4 月至 5 月间,安全研究者连续披露了 Copy Fail、Dirty Frag 与 Fragnesia 三枚 Linux 内核本地权限提升(LPE)漏洞。它们共享同一类攻击范式:利用零拷贝系统调用向页缓存注入恶意数据,在内存中篡改 setuid 二进制文件,使普通用户获取 root 权限。与 2022 年的 Dirty Pipe 漏洞类似,这类攻击不修改磁盘文件,传统完整性监控工具难以察觉。
漏洞概览与影响范围
Copy Fail(CVE-2026-31431)于 4 月 29 日由 Xint Code 团队公开,影响 Linux 内核 4.14 至 6.19.12 版本。该漏洞位于 AF_ALG 接口的 algif_aead 模块,由 2017 年的一次原地优化引入。Dirty Frag(CVE-2026-43284、CVE-2026-43500)于 5 月 7 日披露,影响 esp4、esp6 与 rxrpc 子系统,分别于 2017 年和 2023 年引入。Fragnesia(CVE-2026-46300)于 5 月 13 日公开,是 Dirty Frag 在 XFRM ESP-in-TCP 子系统中的变体。
这三个漏洞波及几乎所有主流 Linux 发行版,包括 Ubuntu、Red Hat Enterprise Linux、Debian、SUSE、Amazon Linux 与 AlmaLinux。攻击者仅需本地普通用户权限,即可通过 732 字节的 Python 脚本实现 100% 成功的权限提升,且脚本仅依赖标准库,无需编译或外部依赖。
页缓存破坏机制
理解这些漏洞需要厘清 Linux 内核的页缓存(Page Cache)与零拷贝(Zero-Copy)机制。页缓存是内核将最近访问的磁盘数据保留在 RAM 中的机制,当应用程序请求文件数据时,内核优先从页缓存返回,避免重复磁盘 I/O。零拷贝系统调用(如 splice、sendfile、vmsplice)通过传递内存页引用而非复制数据,将传统的 4 次上下文切换与 4 次数据复制缩减为 2 次上下文切换与 0 次 CPU 驱动的内存复制。
Copy Fail 的漏洞根源在于 algif_aead 模块的原地优化缺陷。2017 年的 commit 72548b093ee3 将 AEAD 加密的源与目的 scatterlist 合并,使 req->src 与 req->dst 指向同一内存区域。当攻击者通过 splice () 将页缓存页注入加密子系统时,authencesn 算法将目的缓冲区用作临时工作区,在重新排列序列号时会向合法输出区域外写入 4 个可控字节,直接覆盖页缓存。
Dirty Frag 与 Fragnesia 遵循相似路径,但作用于网络子系统的 sk_buff 结构。攻击者利用 splice () 将页缓存页的引用植入发送端 skb 的 frag 槽位,接收端内核代码对该 frag 执行原地加密操作,最终实现对只读文件页缓存的任意字节写入。
利用链与权限提升
攻击者通过控制 splice 的偏移量、长度与 assoclen 参数,精确定位目标 setuid 二进制文件(如 /usr/bin/su、sudo 或 passwd)的 .text 段,注入 shellcode。由于修改仅发生在内存中的页缓存,磁盘文件保持不变,文件完整性监控(FIM)与虚拟文件系统(VFS)审计均无法检测。当受害者执行被篡改的二进制时,内核从已污染的页缓存加载代码,攻击者即获得 UID 0 权限。
此类攻击的隐蔽性在于:系统重启或页被逐出内存后,缓存从磁盘重新加载干净副本,攻击痕迹完全消失。对于容器化环境,由于内核与页缓存为整个节点共享,攻击者可轻易突破 Kubernetes 容器边界,接管多租户主机,甚至污染 CI/CD 流水线中的构建镜像。
防御策略与缓解措施
模块级临时缓解
对于无法立即升级内核的环境,可通过禁用受影响内核模块降低暴露面:
Copy Fail 缓解:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead
此操作对大多数工作负载影响有限,但会禁用显式使用 AF_ALG 的应用(如启用 afalg 引擎的 OpenSSL、嵌入式加密卸载路径)。
Dirty Frag 与 Fragnesia 缓解:
echo 'install esp4 /bin/false' >> /etc/modprobe.d/cve-dirtyfrag.conf
echo 'install esp6 /bin/false' >> /etc/modprobe.d/cve-dirtyfrag.conf
echo 'install rxrpc /bin/false' >> /etc/modprobe.d/cve-dirtyfrag.conf
rmmod esp4 esp6 rxrpc
禁用这些模块将影响 IPsec VPN(如 StrongSwan)与 AFS(Andrew File System)等依赖 RxRPC 的应用。若业务必须保留 IPsec,需参考发行版特定的缓解方案,如 AWS 提供的配置调整。
系统级加固
进一步限制攻击面可采取以下措施:
# 禁止加载新模块
sysctl -w kernel.modules_disabled=1
# 禁用用户命名空间(阻断部分容器逃逸路径)
sysctl -w user.max_user_namespaces=0
LSM BPF 动态防护
对于启用了 LSM BPF 的内核,可通过 eBPF 程序 hook 关键系统调用(如 splice)与 socket 类型(AF_ALG),在运行时拦截可疑的零拷贝操作。建议推动发行版在默认内核配置中启用 LSM BPF 支持。
长期修复路径
最根本的解决方案是升级至已修复的内核版本。上游已通过 revert 2017 年的原地优化(commit a664bf3d603d)修复 Copy Fail,Dirty Frag 与 Fragnesia 的补丁也已合并至稳定分支。建议制定紧急补丁计划,优先处理面向互联网的多租户主机与 CI/CD 构建节点。
检测与监控
安全运营团队可通过以下指标识别潜在利用行为:
- 非 root 用户通过异常父进程(非 shell、sudo、su 本身)启动 su 进程
- 短时间内 curl 下载与 su 执行的关联模式(匹配公开 PoC 特征)
- 容器内进程尝试访问 AF_ALG socket 或执行 splice 系统调用
对于使用 Cortex XDR、XSIAM 等终端检测平台的组织,可部署针对 CVE-2026-31431 的专用检测规则,监控非特权用户对 setuid 二进制文件的异常调用链。
总结
Copy Fail、Dirty Frag 与 Fragnesia 揭示了零拷贝优化与页缓存安全之间的深层张力。这些漏洞并非简单的编码错误,而是多个独立更新(2011 年的 authencesn 算法、2015 年的 AF_ALG AEAD 支持、2017 年的原地优化)在特定交互场景下产生的复合缺陷。防御者需在补丁窗口期内实施模块级缓解,同时评估 LSM BPF 等现代内核安全机制的部署可行性。对于运行大量 Linux 工作负载的组织,建议将内核漏洞响应纳入 DevSecOps 流程,确保镜像构建、容器运行时与主机系统的同步加固。
参考来源
- Huntress: Panic at the Distro — Linux Kernel Flaws CopyFail, Dirty Frag, Fragnesia
- Palo Alto Networks Unit 42: Copy Fail — What You Need to Know About the Most Severe Linux Threat in Years
- Xint Code: copy.fail vulnerability disclosure
- Linux Kernel Git: commits 72548b093ee3, a664bf3d603d
内容声明:本文无广告投放、无付费植入。
如有事实性问题,欢迎发送勘误至 i@hotdrydog.com。