CVE-2026-31431 (Copy Fail) 渗透测试报告

📅 2026/8/22 1:19:05
CVE-2026-31431 (Copy Fail) 渗透测试报告
CVE-2026-31431 (Copy Fail) 渗透测试报告漏洞复现报告| Linux Kernel 本地权限提升漏洞仓库cve-reproduce-reports一、漏洞概述项目内容漏洞名称Copy FailCVE 编号CVE-2026-31431公开披露日期2026-04-29补丁提交日期2026-04-01漏洞类型本地权限提升Local Privilege EscalationCVSS 3.1 评分7.8HighCVSS 向量CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HCNAkernel.orgPoC 来源https://copy.fail/官方修复文档https://www.cve.org/CVERecord?idCVE-2026-31431漏洞简介CVE-2026-31431代号 “Copy Fail”是 Linux 内核加密子系统中的一个逻辑漏洞允许非特权本地用户对系统中任意可读文件的页缓存page cache执行受控的 4 字节写入。通过篡改 setuid 二进制文件如/usr/bin/su、sudo、passwd的内存执行缓存攻击者可在调用该二进制时获得 root 权限。该漏洞由 Theori 研究员 Taeyang Lee 披露Xint Code Research Team 通过 AI 辅助分析内核crypto/子系统发现此缺陷。一个 732 字节的 Python PoC 脚本可在所有受影响发行版上稳定获取 root 权限无需竞争条件、时序精度或用户交互成功率接近 100%。二、受影响范围2.1 受影响内核版本漏洞影响自 2017 年起内核 4.14至各分支修复版本之间的所有 Linux 内核。内核分支修复版本状态4.144.14 起受影响受影响5.10.x5.10.254已修复5.15.x5.15.204已修复6.1.x6.1.170已修复6.6.x6.6.137已修复6.12.x6.12.85已修复6.18.x6.18.22已修复6.19.x6.19.12已修复7.07.0不受影响根因提交72548b093ee38a6d4f2a19e6ef1948ae05c181f72017 年引入的 in-place AEAD 性能优化2.2 已直接验证受影响的发行版发行版内核版本Ubuntu 24.04 LTS6.17.0-1007-awsAmazon Linux 20236.18.8-9.213.amzn2023RHEL 10.16.12.0-124.45.1.el10_1SUSE 166.12.0-160000.9-default其他受影响发行版包括但不限于Debian、Arch Linux、Fedora、Rocky、AlmaLinux、Oracle Linux 等。2.3 利用前提条件本地非特权用户账户访问无需网络访问无需内核调试特性无需预装原语内核加密 APIAF_ALG默认启用几乎所有主流发行版默认配置三、漏洞原理分析3.1 漏洞成因该漏洞是三个独立内核组件交互产生的逻辑缺陷每个单独的修改看似正确组合后却引入了严重问题组件 1AF_ALG 与 In-Place AEAD2017AF_ALG是一种 socket 类型将内核加密子系统暴露给用户态。2017 年一项优化被引入使 AEADAuthenticated Encryption with Associated Data操作以in-place方式执行即同一个 scatterlist 同时作为加密算法的输入和输出。组件 2splice() 系统调用splice()系统调用在文件描述符和管道之间传输数据而无需复制通过引用传递页缓存页。当用户将文件如/usr/bin/susplice 到 AF_ALG socket 时socket 的输入 scatterlist 持有该文件缓存页的直接引用。组件 3authencesn 的 Scratch Writeauthencesn算法用于 IPsec 扩展序列号需要重排字节为此它将 4 字节的序列号临时写入输出缓冲区作为暂存空间。然而它写入的位置超出了合法的输出边界。3.2 漏洞触发机制由于 2017 年的 in-place 优化输出 scatterlist 包含了由splice()传入的只读页缓存页。当authencesn写入超出输出边界时它直接覆盖了目标文件在内核内存缓存中的 4 个字节。┌─────────────────────────────────────────────────────────────┐ │ 漏洞触发链路 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 用户态进程 │ │ │ │ │ │ 1. 创建 AF_ALG socket │ │ │ bind: authencesn(hmac(sha256),cbc(aes)) │ │ │ │ │ │ 2. sendmsg() 携带 AAD 载荷 │ │ │ (含 4 字节待写入数据) │ │ │ │ │ │ 3. splice() 将 /usr/bin/su 管道至 socket │ │ │ (传入页缓存页引用) │ │ │ ▼ │ │ │ 4. recv() 触发解密操作 │ │ │ ───────────────────── │ │ │ authencesn 执行 scratch write │ │ │ 写入超出输出边界 → 覆盖页缓存 │ │ │ ▼ │ │ │ 5. execve(/usr/bin/su) │ │ │ 内核执行被篡改的页缓存版本 │ │ │ ───────────────────── │ │ │ 获得 root shell (UID 0) │ │ │ └─────────────────────────────────────────────────────────────┘3.3 漏洞特征确定性触发无需竞争条件、重试或易崩溃的时序窗口隐蔽性强仅修改内存中的页缓存磁盘文件完全不变可绕过标准文件完整性监控工具高度便携同一脚本跨所有发行版通用影响严重可导致容器逃逸、多租户环境横向移动漏洞原理示意图四、测试环境4.1 测试宿主环境项目配置操作系统Windows 11虚拟化平台VMware Workstation / VirtualBox内存8 GB网络模式NAT4.2 靶机环境项目配置发行版Kali GNU/Linux 2025.1内核版本6.12.13-amd64架构x86_64用户权限普通非特权用户kali, uid1000加密模块CONFIG_CRYPTO_USER_API_AEADm可加载模块网络状态无需网络访问是否安装补丁否6.12.13 修复版本 6.12.85靶机环境信息截图五、渗透测试过程5.1 前置检查确认内核受影响执行以下命令检查内核版本与加密模块配置# 检查内核版本uname-r# 检查 AF_ALG 加密模块配置zgrep CONFIG_CRYPTO_USER_API_AEAD /proc/config.gz2/dev/null\||grepCONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname-r)# 确认 algif_aead 模块状态lsmod|grepalgif_aead判断逻辑内核版本处于受影响范围见 2.1 节→ 受影响CONFIG_CRYPTO_USER_API_AEADy编译进内核或m可加载模块→ 受影响内核模块检查截图5.2 获取 PoC 漏洞利用代码官方 PoC 由 Theori 发布SHA256 校验值如下sha256: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9# 克隆官方 PoC 仓库gitclone https://github.com/theori-io/copy-fail-CVE-2026-31431.gitcdcopy-fail-CVE-2026-31431# 校验文件完整性sha256sum copy_fail_exp.py# 期望输出: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9 copy_fail_exp.py# 赋予执行权限chmodx copy_fail_exp.pyPoC 脚本大小仅 732 字节跨所有受影响发行版通用。PoC 获取与校验截图5.3 执行漏洞利用以普通非特权用户身份执行 PoC# 以普通用户身份执行无需 root无需 sudopython3 copy_fail_exp.py利用流程脚本创建非特权AF_ALGsocket 并绑定authencesn(hmac(sha256),cbc(aes))构造sendmsg()携带包含待写入 4 字节的 AAD 载荷使用splice()将目标文件/usr/bin/su管道至 socket通过偏移和长度精确定义写入位置调用recv()触发解密操作执行越界 scratch write直接写入目标文件页缓存执行被篡改的二进制execve(/usr/bin/su)获得 root shell5.4 验证权限提升结果# 执行 PoC 后验证当前用户身份whoamiid预期输出root uid0(root) gid1000(kali) groups1000(kali),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),101(netdev),107(bluetooth),115(scanner),126(lpadmin),134(wireshark),136(kaboxer)成功获得 root 权限UID 0。漏洞利用成功截图5.5 完整利用过程演示以下为完整的命令执行序列# 步骤 1确认当前为普通用户whoami# 输出: kaliid# 输出: uid1000(kali) gid1000(kali) groups1000(kali),4(adm),...# 步骤 2检查内核版本受影响范围uname-r# 输出: 6.12.13-amd64# 步骤 3执行 PoC无需 sudo直接以普通用户运行python3 copy_fail_exp.py# 步骤 4验证提权结果whoami# 输出: rootid# 输出: uid0(root) gid1000(kali) groups1000(kali),...# 步骤 5验证 root 权限读取敏感文件cat/etc/shadow|head-1# 输出: root:$y$j9T$M9JiauEo1PJNIeMtAWC0$r8FwjnuLkQdRXUNUGPwX0Smu8W9xGJ0Ic4.j1JFj5:20484:0:99999:7:::# 步骤 6退出 root shellexit完整利用过程截图六、影响评估6.1 直接影响影响维度评估机密性C完全High— 可读取任意系统文件与用户数据完整性I完全High— 可篡改任意系统文件可用性A完全High— 可破坏系统服务6.2 场景化影响本地提权任何拥有本地访问权限的低权限用户可立即获取 root容器逃逸Linux 内核页缓存在同一主机所有进程和容器间共享被攻陷的 Pod 可提权至节点 root云环境/CI/CD多租户 Linux 主机、AI 训练集群等运行不可信代码的环境风险极高Kubernetes 集群影响数百万集群节点可导致节点级完全接管6.3 实际危害该漏洞已被 CISA 列入已知被利用漏洞目录KEV存在野外利用迹象。其可靠性、隐蔽性仅内存修改和跨平台适用性使其在云、CI/CD 和 Kubernetes 环境中尤其危险。七、修复与缓解方案7.1 临时缓解无法立即升级内核时方案 A禁用 algif_aead 模块适用于m可加载模块适用于物理机、虚拟机、容器宿主机等标准 Linux 环境# 1. 即时卸载模块sudomodprobe-ralgif_aead# 2. 永久禁用重启后仍生效echoinstall algif_aead /bin/false|sudotee/etc/modprobe.d/disable-algif.conf# 3. 更彻底的禁用阻止所有相关模块sudomodprobe-ralgif_hash algif_skcipher algif_aead algif_rng af_algecho-eblacklist af_alg\nblacklist algif_hash\nblacklist algif_skcipher\nblacklist algif_aead\nblacklist algif_rng\|sudotee/etc/modprobe.d/stop-exploit.confechoinstall af_alg /bin/true|sudotee-a/etc/modprobe.d/stop-exploit.conf# 4. 重启系统使配置完全生效sudoreboot方案 BWSL2 环境专用内核启动参数WSL2 的/init进程在用户态 modprobe 配置生效前即加载模块modprobe 黑名单无效必须使用内核启动参数在 Windows 侧创建/修改C:\Users\你的用户名\.wslconfig[wsl2] kernelCommandLinemodule_blacklistalgif_aead initcall_blacklistalgif_aead_init在 PowerShell 中重启 WSL2wsl--shutdown# 然后重新打开 WSL 终端方案 Cseccomp 策略阻断适用于容器/RHEL 系内置模块在 RHEL 系发行版中受影响模块编译进内核y无法卸载可通过 seccomp 策略阻止AF_ALGsocket 创建{defaultAction:SCMP_ACT_ALLOW,architectures:[SCMP_ARCH_X86_64],syscalls:[{names:[socket],action:SCMP_ACT_ERRNO,args:[{index:1,value:38,op:SCMP_CMP_EQ}]}]}注38为AF_ALG的协议族常量值。7.2 永久修复推荐升级内核至各分支修复版本内核分支最低修复版本5.10.x5.10.2545.15.x5.15.2046.1.x6.1.1706.6.x6.6.1376.12.x6.12.856.18.x6.18.226.19.x6.19.12# Ubuntu/Debiansudoaptupdatesudoaptupgrade-ysudoreboot# RHEL/CentOS/Rocky/Almasudodnf update-ykernelsudoreboot# 验证内核版本uname-r补丁原理官方补丁Commit:a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5将 AF_ALG AEAD 操作恢复为 out-of-place 模式分离源和目标 scatterlist防止页缓存页暴露给可写目标 scatterlist。7.3 验证防御状态重要lsmod | grep algif_aead无输出不能单独作为安全证明内核会在需要时按需自动加载模块。# 验证 AF_ALG 接口是否被阻断python3-cimport socket; ssocket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET); print(VULNERABLE: AF_ALG available)21||echoMITIGATED: AF_ALG blocked预期安全输出MITIGATED: AF_ALG blocked八、测试结论8.1 漏洞复现结论测试项结果漏洞可利用性可稳定利用提权是否成功成功root利用复杂度低732 字节脚本单次执行是否需要竞争条件否是否需要用户交互否跨发行版通用性是磁盘文件是否被篡改否仅内存页缓存8.2 风险评级本漏洞风险等级为高CVSS 3.1 评分 7.8。鉴于已存在公开可用 PoC 且被 CISA 列入 KEV 目录影响范围极广2017 年以来几乎所有主流 Linux 发行版利用前提低仅需本地非特权用户可导致容器逃逸与多租户横向移动建议立即修复优先处理 Kubernetes 节点、CI/CD runner、多租户 Linux 主机以及运行多租户/AI 工作负载的主机。九、参考链接CVE 官方记录https://www.cve.org/CVERecord?idCVE-2026-31431漏洞详情与 PoChttps://copy.fail/官方 PoC 仓库https://github.com/theori-io/copy-fail-CVE-2026-31431Theori 技术分析https://xint.io/blog/copy-fail-linux-distributionsMicrosoft 安全博客https://www.microsoft.com/en-us/security/blog/2026/05/01/cve-2026-31431-copy-fail-vulnerability-enables-linux-root-privilege-escalation/CSA 研究简报https://labs.cloudsecurityalliance.org/wp-content/uploads/2026/05/CSA_research_note_linux_copy_fail_CVE-2026-31431_20260503-csa-styled.pdfoss-security 邮件列表http://www.openwall.com/lists/oss-security/2026/04/29/23上游内核补丁https://git.kernel.org/stable/c/893d22e0135fa394db81df88697fba6032747667https://git.kernel.org/stable/c/19d43105a97be0810edbda875f2cd03f30dc130chttps://git.kernel.org/stable/c/961cfa271a918ad4ae452420e7c303149002875bhttps://git.kernel.org/stable/c/3115af9644c342b356f3f07a4dd1c8905cd9a6fchttps://git.kernel.org/stable/c/8b88d99341f139e23bdeb1027a2a3ae10d341d82https://git.kernel.org/stable/c/fafe0fa2995a0f7073c1c358d7d3145bcc9aedd8https://git.kernel.org/stable/c/ce42ee423e58dffa5ec03524054c9d8bfd4f6237https://git.kernel.org/stable/c/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5十、免责声明本报告仅用于安全研究与授权渗透测试目的。漏洞复现操作应在受控的测试环境中进行严禁在未授权的系统上实施。读者应遵守当地法律法规因不当使用本报告所述技术造成的任何后果由使用者自行承担。