adilkurtulmus/linux-copy-fail-CVE-2026-31431

GitHub: adilkurtulmus/linux-copy-fail-CVE-2026-31431

针对 Linux 内核 CVE-2026-31431 漏洞的深入分析与本地提权 PoC,揭示了通过 AF_ALG 和 splice 缺陷污染 Page Cache 的攻击路径。

Stars: 0 | Forks: 0

# Linux Copy-Fail 分析 (CVE-2026-31431) 🛡️ 本仓库包含针对 CVE-2026-31431 漏洞的深入分析、概念验证 和实验室测试结果,该漏洞通常被称为“Copy-Fail”。 Copy-Fail 利用了 Linux 内核 Crypto API (AF_ALG) 与 splice() 系统调用结合时的一个逻辑缺陷。它允许无特权的本地攻击者执行 Page Cache Poisoning,从而导致本地权限提升 (LPE)。 ## 🧠 技术概述:Page Cache Poisoning 与修改磁盘上文件的传统漏洞利用不同,Copy-Fail 直接针对 Page Cache (RAM)。当读取文件时,内核会在 RAM 中存储一个副本以提高性能。由于特定内核版本上 authenc 算法中存在内存管理错误,攻击者可以欺骗内核覆盖这些“只读”内存页。 通过向 /usr/bin/su 等 SETUID 二进制文件的内存页投毒,可以绕过身份验证并生成一个 root shell。 ## 🧪 实验环境与测试结果 测试在多个 Ubuntu 发行版上进行,专门检查内核反向移植和补丁管理的影响。 | 发行版 | 内核版本 | 补丁日期 | 结果 | 观察结果 | |---------------|--------------------------|---------------|----------------|---------------------------------| | **Ubuntu 24.04** | 6.8.0-87-generic | Oct 2025 | ❌ 失败 | 安全更新已激活 | | **Ubuntu 22.04** | **5.15.0-125-generic** | **Sep 2024** | ✅ **成功** | **存在漏洞 (未打补丁)** | | **Ubuntu 18.04** | **4.15.0-197-generic** | **Nov 2022** | ✅ **成功** | **存在漏洞 (未打补丁)** | ### 反向移植悖论 内核版本号可能会产生误导。虽然像 6.8 这样的“较新”内核已通过安全补丁得到保护,但由于缺少反向移植的修复程序,像 4.15 和 5.15 这样的较旧或 EOL (End of Life) 内核仍然完全处于易受攻击的状态。 ## 📊 Ubuntu 22.04 (内核 5.15) 对比分析 在研究过程中,通过测试共享相同主要内核版本的两个不同 Ubuntu 22.04 系统,得到了一个引人注目的结果: | 内核版本 | 补丁日期 | 结果 | 状态 | | :--- | :--- | :--- | :--- | | **5.15.0-125** | Sep 2024 | ✅ **成功** | 存在漏洞 (触发漏洞利用) | | **5.15.0-170** | Jan 2026 | ❌ **失败** | 安全 (已打补丁)| ### **分析:** 此测试证明系统安全性不能仅仅通过主版本号来衡量。运行 5.15.0-125 的服务器可以在几秒钟内被获取 root 权限,而 5.15.0-170 则完全阻止了该攻击。 **成功的漏洞利用输出 (内核 5.15.0-125):** ``` $ python3 ubuntu_22.04_copy_fail_exploit.py [*] Poisoning /usr/bin/su (Ubuntu 22.04 / Kernel 5.15)... [+] Exploit completed. Triggering Root... # id uid=0(root) gid=1004(jastin) groups=1004(jastin) # whoami root # export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # /bin/bash -i root@ovh-net-dream01:/tmp# ``` ## 🛠️ 概念验证 该 PoC 使用 ctypes 开发,以确保在不同 Python 版本(特别是缺乏原生 os.splice 支持的版本)之间的兼容性。 ### 主要特性: - 通过 ctypes 进行底层 libc.splice 调用。 - 强制缓存目标二进制文件。 - 演示横向影响(一个用户投毒会影响所有用户)。 ### 运行漏洞利用: # 1. 加载所需的 crypto 模块: sudo modprobe af_alg algif_aead authenc echainiv # 2. 执行漏洞利用: python3 final_exploit.py ## 🎥 演示 ``` $ python3 ubuntu_18.04_copy_fail_exploit.py [*] /bin/su zehirleniyor (Kernel 4.15)... [+] Bellek zehirlendi! Root tetikleniyor... # id uid=0(root) gid=1004(jastin) groups=1004(jastin) # whoami root # export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # /bin/bash -i root@ovh-net-dream02:/tmp# ``` ## 🛡️ 缓解与防御 - 1. 根本解决方案:更新内核 - sudo apt update && sudo apt upgrade -y - sudo reboot ### 2. 应急响应:刷新缓存 - 清除内存中的有毒页面 sync; echo 3 | sudo tee /proc/sys/vm/drop_caches ### 3. 主动防御:将模块加入黑名单 - echo "blacklist authenc" | sudo tee /etc/modprobe.d/blacklist-authenc.conf - echo "blacklist algif_aead" | sudo tee -a /etc/modprobe.d/blacklist-authenc.conf - sudo depmod -a ## 🛡️ 漏洞检测脚本 ``` # 1. 检查内核版本 # uname -r # 2. 检查已加载的模块 (若无输出则表示安全) # lsmod | grep -E "algif_aead|authencesn" # 3. 关键测试 — authencesn bind python3 -c " import socket try: s = socket.socket(38, 5, 0) s.bind(('aead', 'authencesn(hmac(sha256),cbc(aes))')) print('[!] CRITICAL — System Vulnerable!') s.close() except: print('[+] Secure — authencesn unreachable') " # 4. setuid binary hash (referans) sha256sum /usr/bin/su /usr/bin/sudo /usr/bin/passwd ``` 评估表: | 结果 | 含义 | |-------------------------------------|---------------------------------| | **无 lsmod 输出 + bind 错误** | ✅ 安全 | | **存在 lsmod 输出 或 bind 成功** | ⚠️ 存在漏洞,请立即应用补丁 | **免责声明:** 本研究和 PoC 仅用于教育和授权的安全测试目的。在未获授权的系统上使用可能会产生法律后果。
标签:0day挖掘, AF_ALG, Backport, Copy-Fail, CSV导出, CVE-2026-31431, Linux Crypto API, Linux漏洞分析, LPE, Page Cache Poisoning, SETUID提权, splice系统调用, Web报告查看器, 内存管理, 内核安全, 内核补丁, 安全渗透, 数据展示, 本地提权, 权限绕过, 漏洞PoC, 漏洞复现, 红队, 网络安全, 逆向工具, 隐私保护, 页缓存投毒