2026年4月29日,一个潜伏在 Linux 内核中长达 9 年的史诗级本地提权漏洞 CVE-2026-31431(代号 Copy Fail)被公开披露。该漏洞 CVSS v3.1 评分达 7.8(高危),影响范围覆盖自 2017 年以来几乎所有主流 Linux 发行版,包括 Ubuntu、Debian、RHEL、SUSE 及 Amazon Linux。该漏洞攻击方式极为简洁,影响范围广泛,任何本地无特权用户,仅需一个 732 字节的 Python 脚本即可瞬间获取系统的 root 最高权限,攻击成功率高达 100%。
漏洞概览
漏洞编号:CVE-2026-31431 / CNVD-2026-19044。
漏洞类型:权限提升。
危害等级:高危。
CVSS v3.1:7.8。
影响范围:Linux 内核 4.14 至 6.19.11 / 7.0-rc(2017 年至今全部主流发行版)。
利用后果:普通用户提权至 Root / 容器逃逸宿主机 / 页缓存静默篡改。
利用特征:逻辑缺陷利用 / 无需内存破坏 / 无需竞态条件 / 本地低权限触发。
发现方:Theori / Xint Code(AI 辅助)。
修复状态:官方已修复(内核 6.18.22 / 6.19.12 / 7.0 系列),建议立即升级。
攻击原理深度解析
Copy Fail 的攻击核心是页缓存写入原语(page-cache write primitive)。攻击者可以通过以下组合,实现向任意可读文件的页缓存中写入受控的 4 字节数据:首先利用 splice() 系统调用将文件数据零拷贝传入内核管道;然后通过 AF_ALG 套接字接口将数据送入内核加密子系统;最后触发 authencesn 解密路径,即使认证标签错误,破坏已经生效。
最关键的是:由于破坏发生在页缓存(内存中的文件缓存副本)中,而非磁盘上的持久化文件,系统不会将受破坏的页面标记为脏页以触发写回操作。因此,磁盘上的文件保持原样,所有基于校验和的文件完整性工具(如 AIDE、Tripwire)均无法检测到异常。
三步攻击链路
攻击者一般选取系统上的 setuid 二进制文件(如 sudo 或 su),通过页缓存写入篡改其在内存中的执行逻辑;当任何用户(或系统进程)调用该程序时,内核将直接从被污染的页缓存中读取并执行,攻击者由此获得 root 权限。
Theori 团队发布的概念验证(PoC)漏洞利用脚本仅 732 字节,约 10 行 Python 代码,可在 Ubuntu、RHEL、Amazon Linux、SUSE 等主流发行版上确定性获取 root 权限。这一极致简洁性源于:无需竞态条件(与 Dirty Cow 不同);无需内核版本偏移量;无需编译(纯 Python 标准库实现);确定性利用(可精确控制写入字节)。
影响分析
该漏洞的核心高危场景包括:多租户 Linux 系统中任何本地账户可横向提权;共享内核容器环境被击穿隔离;CI/CD 构建管道中执行不可信代码;以及容器逃逸(页缓存在宿主机上共享,被入侵容器可破坏宿主机上其他容器可见的 setuid 二进制文件)。
在隐蔽性方面:所有磁盘上的文件完整性检测均无法发现异常,攻击者可在系统管理员毫无察觉的情况下维持持久化的 root 访问。
修复与缓解
根治方案:将内核升级至 6.18 系列 6.18.22 及以上、6.19 系列 6.19.12 及以上、7.0 系列及以上。修复原理为撤回 2017 年引入的 in-place 就地加密优化,恢复安全的 out-of-place 操作。
临时缓解:若无法立即重启更新内核,可禁用受影响模块:在 /etc/modprobe.d/ 中创建禁用 algif_aead 的配置文件并卸载相应模块。但需注意:此方案在内核静态编译了 CONFIG_CRYPTO_USER_API_AEAD=y 的企业发行版上无效。
转载自FreeBuf
下一篇:返回列表