Xint Code 研究人员预警一款高危 Linux 漏洞,漏洞编号 CVE-2026-31431(CVSS 评分 7.8),被命名为Copy Fail。该漏洞允许本地普通无权限用户向任意可读文件的页缓存中写入 4 个可控字节,可在主流 Linux 发行版上实现本地提权至 Root 权限。
漏洞利用 AF_ALG 接口与 splice() 系统调用,可向任意可读文件的页缓存写入 4 个字节。仅需一段 732 字节的脚本,即可在内存中篡改Setuid 权限二进制程序,不修改磁盘原始文件,隐蔽性极强、难以检测。漏洞影响 Ubuntu、RHEL、SUSE、亚马逊 Linux 等主流发行版;由于页缓存为全局共享机制,该攻击还能跨容器边界逃逸。
Xint Code 发布报告称:“Copy Fail(CVE-2026-31431)是 Linux 内核 authencesn 加密模板中的逻辑漏洞。本地低权限用户可确定性、可控地向系统任意可读文件的页缓存写入 4 个字节。仅一段 732 字节的 Python 脚本,即可篡改 Setuid 二进制文件并获取 Root 权限,适配 2017 年以来几乎所有 Linux 发行版。”
Copy Fail 利用内核逻辑缺陷:被损坏的页缓存数据不会被标记为脏页,磁盘上的原文件保持不变,但内存中的缓存副本被静默篡改。系统读取文件均优先读取页缓存,低权限用户可篡改 Setuid 程序的缓存页面,进而提权拿到 Root。共享页缓存机制也让该攻击能够突破容器隔离、实现容器逃逸。研究人员借助 AI 分析加密子系统行为发现此漏洞;与脏牛(Dirty Cow)、脏管道(Dirty Pipe)不同,该漏洞利用代码短小、无竞争条件、隐蔽性高、可移植性强,适配主流发行版与硬件架构,可用于本地提权和 Kubernetes 容器逃逸。
漏洞根源起始于 AF_ALG 组件,该接口默认允许任意无权限用户调用内核加密子系统。攻击者借助 splice() 将文件页缓存页面直接映射到加密散列链表,使加密操作直接作用于文件底层内存。在 AEAD 解密过程中,内核采用原地覆写机制,将用户缓冲区与页缓存页面合并至同一个可写结构体中。
authencesn 加密算法存在设计异常:把输出缓冲区当作临时草稿空间,向合法边界外侧多写入 4 个字节。在该漏洞利用链路中,这 4 字节溢出可精准写入目标文件的页缓存。攻击者可自主控制目标文件、偏移位置与写入内容,实现精准内存篡改与权限提升。
该漏洞由多年累积的代码变更、authencesn 算法设计缺陷、AF_ALG 机制支持,以及 2017 年引入的原地优化特性共同催生,属于长期潜伏的高危内核漏洞。
漏洞利用主要针对 Linux 系统常见的 Setuid-Root 程序 /usr/bin/su。
攻击流程:
- 攻击者创建 AF_ALG 套接字,绑定至存在漏洞的 authencesn AEAD 模式,无需任何高级权限;设置加密密钥并创建请求套接字。
- 逐次构造 4 字节写入载荷:通过 AAD 携带要注入的 4 字节数据,借助 splice () 将目标文件页缓存映射到加密运算流程;通过精心构造参数,强制内核将
/usr/bin/su 指定偏移位置视为可写内存。 - 调用
recv() 触发解密运算,内核读取 AAD 数据,经由 authencesn 草稿区溢出写入,向目标程序页缓存写入 4 个字节;尽管 HMAC 校验失败,但内存篡改已永久留存。重复此步骤,向缓存中的二进制程序注入完整 Shellcode。 - 最后执行
execve("/usr/bin/su"),内核优先加载页缓存中被篡改的程序副本而非磁盘原文件;由于 su 具备 Setuid-Root 权限,注入代码以 Root 身份执行,攻击者完全控制系统。
研究人员发布演示:同一段 732 字节利用代码可在四款 Linux 发行版中稳定提权,普通低权限账号(UID 1001)可持久获取 Root 权限。测试环境包括 Ubuntu 24.04 LTS、Amazon Linux 2023、RHEL 10.1、SUSE 16,覆盖内核版本 6.12 ~ 6.18,均被成功攻陷。
研究人员表示:2017 年至漏洞补丁发布前编译的内核,几乎覆盖所有主流 Linux 发行版,均受此漏洞影响。Copy Fail 仅需一个本地低权限普通账号,无需外网访问、无需开启内核调试、无需预置特殊组件。主流发行版默认配置均启用内核加密 API(AF_ALG),2017 年至补丁发布前的所有内核版本默认即可被攻击利用。