G01d3nW01f/CVE-2026-31431

GitHub: G01d3nW01f/CVE-2026-31431

一个用 Rust 编写的 Linux 内核本地提权 PoC,演示如何利用 AF_ALG 加密接口与 splice 的组合漏洞篡改页缓存以获取 root 权限。

Stars: 0 | Forks: 0

# CVE-2026-31431 LPE PoC (Rust 实现) 本项目是用 Rust 实现的本地提权 (LPE) 漏洞 (模拟 CVE-2026-31431) 的概念验证。它演示了如何通过利用 Crypto API 来篡改 Linux 内核页缓存。[cite: 1, 2] ## 概述 该工具利用了与 `AF_ALG` (内核加密接口) 和 `splice` 系统调用相关的漏洞。[cite: 2] 它允许非特权用户覆盖只读文件页缓存中的 4 个字节——具体目标是 `/etc/passwd` 中的 UID 字段,以将其临时更改为 `0000` (root)。[cite: 1, 2] ## 工作原理 * **目标识别**:程序解析 `main.rs` 以找到当前用户的 UID 在 `/etc/passwd` 中的确切文件偏移量。[cite: 1, 2] * **页缓存预热**:读取目标文件以确保相关页面已加载到内核页缓存中。[cite: 2] * **内存篡改**: * 它使用 `AF_ALG` 并指定 `authencesn(hmac(sha256),cbc(aes))` 算法来初始化套接字。[cite: 2] * 通过精心构造 `setsockopt` 参数并使用 `splice`,它将文件数据重定向通过加密管道。[cite: 2] * 该漏洞允许“解密”过程用所需的 4 个字节 (`0000`) 覆盖原始页缓存数据。[cite: 2] * **权限提升**: * 如果提供了 `--shell` 标志,它将执行 `su `,该操作会成功,因为系统现在在缓存的 `/etc/passwd` 中将该用户的 UID 视为 `0`。[cite: 1] * 否则,它会使用 `POSIX_FADV_DONTNEED` 驱逐被破坏的页缓存,以恢复系统完整性。[cite: 1] ## 前置条件 * **操作系统**:Linux (特定于此 Crypto API 行为存在漏洞的版本)。 * **语言**:Rust (2024 版本)。[cite: 3] * **依赖项**:`libc` 和 `nix` (包含 `fs`、`socket`、`zerocopy` 和 `user` 特性)。[cite: 3] ## 使用方法 ### 构建 ``` cargo build --release ``` ### 执行 **测试页缓存修补,不生成 shell:** ``` ./target/release/cve-2026-31431 ``` **尝试提权至 root shell:** ``` ./target/release/cve-2026-31431 --shell ``` ## 项目结构 * `main.rs`:编排攻击,处理 CLI 参数,并执行最终的 shell 命令。[cite: 1] * `modules.rs`:包含核心利用逻辑,包括 `AF_ALG` 套接字操作和 UID 偏移量搜索。[cite: 2] * `Cargo.toml`:定义项目元数据和外部 crate 依赖项。[cite: 3] ## 技术参考 * **相关文件**:`main.rs`、`modules.rs`、`Cargo.toml`[cite: 1, 2, 3] * **关键系统调用**:`socket`、`bind`、`sendmsg`、`splice`、`posix_fadvise`。[cite: 1, 2]
标签:0day挖掘, AF_ALG, Crypto API, CVE-2026-31431, /etc/passwd修改, Linux内核漏洞利用, LPE, Maven, PoC, Rust语言, setsockopt, Splice系统调用, UID覆盖, Web报告查看器, 内核安全, 内核漏洞, 协议分析, 可视化界面, 子域名枚举, 安全渗透, 底层安全开发, 暴力破解, 本地提权, 权限提升, 漏洞验证, 系统安全, 红队武器化, 通知系统, 零拷贝, 页面缓存污染