luotian2/CVE-2026-31431
GitHub: luotian2/CVE-2026-31431
Linux 内核 authencesn 加密模板逻辑漏洞(CVE-2026-31431)的公开 PoC,可在主流发行版上以极小载荷实现本地提权与容器逃逸。
Stars: 0 | Forks: 0
# CVE-2026-31431 — 复制失败
[中文版](README_zh.md)
**732 字节在所有主要 Linux 发行版上获取 Root 权限**
[CVE-2026-31431](https://copy.fail/) (Copy Fail) 是 Linux 内核的 `authencesn` 加密模板中的一个逻辑漏洞。它允许无特权的本地用户在系统上任何可读文件的页缓存中触发确定性的、受控的 4 字节写入。
## 概述
- **CVE ID:** CVE-2026-31431
- **类型:** 本地权限提升 / 容器逃逸
- **受影响版本:** 启用了 `CONFIG_CRYPTO_AUTHENC` 的 Linux 内核(基本上涵盖自 2017 年以来的所有主要发行版)
- **发现者:** [Xint Code 研究团队](https://xint.io/),并由 Theori 研究员 Taeyang Lee 提供初步洞察
## 漏洞原理
该漏洞链由两个行为组成:
1. **AF_ALG + splice**:`splice()` 通过引用将页缓存页传输到 AF_ALG socket 的 scatterlist 中。对于 AEAD 解密的原地模式,标签页(来自目标文件的页缓存)通过 `sg_chain()` 保持链接到输出 scatterlist。
2. **authencesn 临时写入**:`crypto_authenc_esn_decrypt()` 使用 `dst[assoclen + cryptlen]`(越过标签,进入页缓存页)作为 ESN 序列号重排的临时空间,写入 4 个受攻击者控制的字节且永远不会恢复它们。
被破坏的页**永远不会被标记为脏页**,因此磁盘上的文件保持不变。但是内存中的页缓存才是实际被读取的内容——使得这种破坏在系统范围内立即可见。
## 漏洞利用
该漏洞利用程序通过一个小型 shellcode 载荷破坏 `/usr/bin/su`(或任何 setuid 二进制文件)的页缓存,每次写入 4 个字节。在所有迭代完成后,运行 `su` 即可执行载荷并降级到一个 root shell。
### Python (exp.py)
需要 Python 3.10+(因为使用了 `os.splice`)。仅使用标准库模块。
``` python3 exp.py ``` ### C (exp.c)
无 Python 依赖。编译并运行: ``` gcc -o exp exp.c ./exp ``` ## 影响 | 能力 | 详情 | |---|---| | **可移植** | 同一脚本适用于 Ubuntu、Amazon Linux、RHEL、SUSE 等——无需针对特定发行版调整偏移量 | | **极小** | Python 漏洞利用程序仅约 732 字节 | | **隐蔽** | 绕过 VFS 写入路径;页永远不会被标记为脏页;磁盘上的校验和保持不变 | | **跨容器** | 页缓存在容器之间共享——容器逃逸向量(见第 2 部分) | ## 参考文献 - [copy.fail — 官方公告](https://copy.fail/) - [Xint 博客 — Copy Fail: 732 字节获取 Root](https://xint.io/blog/copy-fail-linux-distributions) - [NVD 条目](https://nvd.nist.gov/vuln/detail/CVE-2026-31431) ## 免责声明 本代码仓库仅出于教育和防御性研究目的发布。请勿在您未拥有或未获得明确测试许可的系统上使用此代码。
需要 Python 3.10+(因为使用了 `os.splice`)。仅使用标准库模块。
``` python3 exp.py ``` ### C (exp.c)
无 Python 依赖。编译并运行: ``` gcc -o exp exp.c ./exp ``` ## 影响 | 能力 | 详情 | |---|---| | **可移植** | 同一脚本适用于 Ubuntu、Amazon Linux、RHEL、SUSE 等——无需针对特定发行版调整偏移量 | | **极小** | Python 漏洞利用程序仅约 732 字节 | | **隐蔽** | 绕过 VFS 写入路径;页永远不会被标记为脏页;磁盘上的校验和保持不变 | | **跨容器** | 页缓存在容器之间共享——容器逃逸向量(见第 2 部分) | ## 参考文献 - [copy.fail — 官方公告](https://copy.fail/) - [Xint 博客 — Copy Fail: 732 字节获取 Root](https://xint.io/blog/copy-fail-linux-distributions) - [NVD 条目](https://nvd.nist.gov/vuln/detail/CVE-2026-31431) ## 免责声明 本代码仓库仅出于教育和防御性研究目的发布。请勿在您未拥有或未获得明确测试许可的系统上使用此代码。
标签:0day挖掘, AF_ALG, CVE-2026-31431, Linux内核漏洞, Python, setuid提权, splice, Web报告查看器, 任意代码执行, 内核安全, 利用工具, 安全渗透, 客户端加密, 容器逃逸, 密码学模块, 无后门, 本地提权, 漏洞分析, 网络安全, 路径探测, 逆向工具, 隐私保护, 页缓存投毒