xeloxa/copyfail-exploit

GitHub: xeloxa/copyfail-exploit

针对 Linux 内核 AF_ALG 页缓存漏洞 CVE-2026-31431 的多架构本地提权利用工具,确定性执行、跨发行版通用,无需竞争条件或内核偏移信息。

Stars: 4 | Forks: 1

# 复制失败 · CVE-2026-31431 影响从 4.11 到(但不包括)已修补的 6.18 版本的 Linux 内核的本地权限提升漏洞。 该漏洞存在于内核的 AF_ALG socket 接口中——具体来说,是 `authencesn` 在就地 AEAD 解密期间处理 scatter-gather 列表的方式。导致的结果是:无特权的用户可以覆盖_任何可读文件的页缓存_中的 4 个字节。 用 shellcode 覆盖一个诸如 `/usr/bin/su` 的 setuid 二进制文件,运行它,你就能获得 root 权限。无需竞争、无需内核符号、无需重新编译。相同的 172 字节的 AArch64 payload(或 x86-64 的 160 字节,i386 的 126 字节,ARMv7 的 138 字节)可跨发行版通用。 该漏洞由 **Taeyang Lee & Theori / Xint Code** 发现,并于 2026 年 4 月 29 日发布。本仓库是一个独立的、基于类的重新实现,旨在用于授权测试。 ## 演示 | 检查漏洞 | 利用并获取 root 权限 | | :---: | :---: | | ![检查漏洞](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/a89e26f92d161522.png) | ![利用并获取 root 权限](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8fe85feaee161528.png) | ## 为什么它与 Dirty Cow / Dirty Pipe 不同 - **无需竞争。** 一次命中,确定性执行。 - **无需特定内核偏移量。** 脚本不关心你使用的是什么发行版。 - **可能实现容器逃逸。** 页缓存与宿主机共享;一个具有 `allowPrivilegeEscalation: true`(Kubernetes 默认值)的容器可以突破出去。 ## 受影响的系统 任何运行内核版本介于 4.11 和大约 6.17.x 之间的系统,包括: - Ubuntu 24.04 LTS(搭载 6.17.x) - Amazon Linux 2023(修补 6.18.x 之前的版本) - RHEL 10.1, SUSE 16 (6.12.x) - 安全更新之前的 Debian Trixie(6.12.85+deb13 修复了此问题) 已修补的内核:主线版本 ≥ 6.18.22 / 6.19.12 / 7.0,以及向稳定分支的后向移植。 ## 快速开始 ``` # 检查系统是否存在漏洞 python3 exploit.py --check # 运行 exploit(需要非 root 用户) python3 exploit.py ``` ## 系统要求 - Python 3.6+(原生 `os.splice` 从 3.10 开始支持) - 支持 AF_ALG + `authencesn(hmac(sha256),cbc(aes))` 的内核 - 一个 setuid-root 二进制文件(默认为 `/usr/bin/su`;使用 `--scan` 寻找替代项) 如果检查提示算法相关的报错,请加载所需的模块: ``` sudo modprobe algif_aead authencesn hmac cbc ``` 某些发行版附带了一个临时阻止文件(`/etc/modprobe.d/disable-algif_aead.conf`)。该脚本在以 root 身份运行时会自动将其删除,或者你也可以手动删除它。 ## 缓解措施 **永久方案:** 更新你的内核。在 Ubuntu/Debian 上: ``` sudo apt update && sudo apt upgrade linux-image-generic ``` **临时解决方案(不影响 IPsec/XFRM):** ``` echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf sudo rmmod algif_aead 2>/dev/null ``` **容器:** 主要的缓解措施是使用 seccomp profile 阻止 AF_ALG socket。此外,在你的 pod 安全上下文中设置 `allowPrivilegeEscalation: false` 以启用 `no_new_privs`,这将阻止内核在执行 `execve()` 时遵循 setuid 位。 ## 参考资料 - [官方网站 - copy.fail](https://copy.fail) - [技术分析 - Xint.io](https://xint.io/blog/copy-fail-linux-distributions) - [原始 PoC - theori-io](https://github.com/theori-io/copy-fail-CVE-2026-31431) - [内核修复提交](https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5) - [CVE 条目 - NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-31431) - [oss-security 披露](https://www.openwall.com/lists/oss-security/2026/05/02/6) ## 致谢 - **Taeyang Lee & Theori / Xint Code** – 漏洞发现与原始 PoC - **ZephrFish** – 多架构 shellcode 扩展 - **本仓库** – 独立的 OOP 重新实现,自动移除临时阻止文件,系统扫描,测试和文档编写 ## 免责声明 本工具仅用于教育和授权安全测试。请勿在你未拥有或未获得书面测试许可的系统上运行它。
标签:0day挖掘, AArch64, AEAD加密, AF_ALG, ARMv7, CSV导出, CVE-2026-31431, Dirty Cow, Dirty Pipe, Hakrawler, Linux内核, LPE, Python, SetUID, Shellcode, Web报告查看器, x86-64, 内存覆写, 内核安全, 协议分析, 安全渗透, 容器逃逸, 技术调研, 数据展示, 无后门, 本地提权, 权限提升, 漏洞复现, 红队, 网络安全, 脏页缓存, 跨架构, 逆向工具, 隐私保护