Callum-Cameron26/CVE_2026_31431-Testing-the-Copy-Fail-exploit
GitHub: Callum-Cameron26/CVE_2026_31431-Testing-the-Copy-Fail-exploit
针对 CVE-2026-31431 Linux 内核 algif_aead 页缓存损坏漏洞的检测与本地提权利用工具包。
Stars: 0 | Forks: 0
# CVE-2026-31431 漏洞利用工具包
一个用于检测和利用 Linux 内核 `algif_aead` crypto 子系统中页缓存损坏漏洞的综合工具包。
## ⚠️ 法律声明
**仅供授权测试使用。** 请仅在您拥有或已获得明确测试许可的系统上使用。本工具包会执行真实的权限提升操作,未经授权的使用可能违反当地法律。
## 🎯 漏洞概述
CVE-2026-31431 漏洞源于 Linux 内核 crypto API 中的一个设计缺陷,即 AEAD(认证加密关联数据)操作在原地运行。当数据从文件拼接(splice)到 crypto 操作时,内核的页缓存页将变为可写状态,允许攻击者在无需触及磁盘上实际文件的情况下损坏内存映射的文件内容。
**技术细节:**
- **受影响组件**:使用 `authencesn(hmac(sha256),cbc(aes))` 算法的 `algif_aead`
- **攻击向量**:通过页缓存损坏实现本地权限提升
- **影响**:无特权用户可获得 root 访问权限
- **持久性**:更改仅存在于内存中;重启后清除
## 📁 工具包组件
| 脚本 | 用途 | 风险等级 |
|--------|---------|------------|
| `test_cve_2026_31431.py` | 漏洞检测(安全) | 🟢 低 |
| `exploit_cve_2026_31431.py` | 权限提升漏洞利用 | 🔴 高 |
这两个工具均需要 Python 3.10+ 并仅使用标准库模块。
## 🚀 快速入门
```
# 步骤 1: 检查系统是否存在漏洞
python3 test_cve_2026_31431.py
# 步骤 2: 如果存在漏洞,获取 root 权限
python3 exploit_cve_2026_31431.py --shell
```
**退出代码:**
- `0` = 不易受攻击 / 测试通过
- `1` = 测试期间出错
- `2` = 系统存在漏洞
## 🔍 漏洞检测
检测器会执行一项安全、非破坏性的测试:
1. **系统检查**:验证 `AF_ALG` 套接字的可用性及 crypto 算法支持
2. **测试环境**:创建带有已知数据模式的临时文件
3. **漏洞利用尝试**:触发页缓存损坏漏洞
4. **分析**:检查我们的标记字节是否出现在缓存的文件数据中
```
python3 test_cve_2026_31431.py
```
**可能的结果:**
- ✅ `System requirements not met` - 内核已修补或缺少所需功能
- ⚠️ `SYSTEM VULNERABLE` - 漏洞已确认,可能被利用
- ⚠️ `Page cache corruption detected` - 存在部分漏洞,仍可被利用
- ✅ `No page cache corruption detected` - 系统安全
## 💻 权限提升
该漏洞利用程序针对 `/etc/passwd`,旨在修改内存中用户的 UID 字段:
```
# 测试模式 (无 shell)
python3 exploit_cve_2026_31431.py
# 完整 exploit (获取 root shell)
python3 exploit_cve_2026_31431.py --shell
```
**漏洞利用过程:**
1. **目标选择**:在 `/etc/passwd` 中查找当前用户的 UID 字段
2. **内存损坏**:仅在页缓存中将 UID 更改为 "0000"
3. **验证**:确认系统库读取到的 UID 为 0
4. **权限提升**:使用用户的真实密码通过 `su` 获取 root shell
**前提条件:**
- 用户必须拥有 4 位数的 UID (1000-9999)
- 没有 NSS 缓存守护进程掩盖对 `/etc/passwd` 的读取
- 拥有足够的内存以保持页缓存处于活动状态
## 🛡️ 系统恢复
该漏洞利用仅修改内核内存,而不修改磁盘文件。要恢复正常运行:
### 自动恢复(测试模式)
检测器在退出时会自动清理页缓存。
### 手动恢复
```
# 方法 1: 清除页面缓存 (需要 root)
echo 3 > /proc/sys/vm/drop_caches
# 方法 2: 驱逐特定文件 (非特权)
python3 -c "
import os
fd = os.open('/etc/passwd', os.O_RDONLY)
os.posix_fadvise(fd, 0, 0, os.POSIX_FADV_DONTNEED)
os.close(fd)
"
# 方法 3: 重启系统
sudo reboot
```
## 🔧 缓解策略
### 临时缓解
禁用存在漏洞的 crypto 模块:
```
# 阻止模块加载
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
# 如果已加载则卸载
sudo rmmod algif_aead 2>/dev/null
```
### 永久修复
更新至包含上游安全补丁的内核版本。该修补程序将 AEAD 操作改为在非原地运行,从而防止页缓存页变为可写状态。
## 🎯 受影响的系统
**已确认存在漏洞:**
- Ubuntu 24.04 LTS
- Amazon Linux 2023
- RHEL 9.3
- SUSE Linux Enterprise 15
**可能受影响:**
- 任何内核包含 commit `72548b093ee3` (2017+) 且未将其还原的系统
- 大多数带有默认 crypto 模块的现代 Linux 发行版
**检查您的系统:**
```
uname -r
python3 test_cve_2026_31431.py
```
## 🔬 技术深入探讨
### `write4` 原语
核心漏洞利用技术可向任何可读文件的页缓存中准确写入 4 个字节:
```
1. sendmsg([AAD_data], control_messages, MSG_MORE)
2. splice(file_fd, pipe_fd, 32, offset_src=target_offset)
3. splice(pipe_fd, crypto_fd, 32)
4. recv(crypto_fd) # Triggers vulnerability
```
**要点:**
- AAD 的第 4-7 字节(序列号)会被复制到目标位置
- 目标位置 = splice 操作产生的页缓存页
- 页内偏移量与 splice 偏移量匹配
- 每次操作只能写入 4 个字节
### 攻击面分析
该漏洞影响系统进程读取的任何全局可读文件:
- `/etc/passwd` - 用户数据库(主要目标)
- `/usr/bin/su` - Setuid 二进制文件(替代目标)
- 由特权进程读取的配置文件
- 由系统服务加载的库文件
## 📄 许可证
本项目仅供教育和授权安全测试目的提供。用户有责任遵守适用的法律和法规。
**⚠️ 请记住**:能力越大,责任越大。请合乎道德地使用这些工具,并且仅在您获得授权测试的系统上使用。
标签:0day挖掘, AEAD, algif_aead, CVE-2026-31431, Linux内核漏洞, LPE, Maven, PoC, Python3, Root提权, Web报告查看器, 内存破坏, 内核安全, 协议分析, 密码学子系统, 提权脚本, 攻击复现, 数据展示, 暴力破解, 本地提权, 权限提升, 漏洞验证, 红队, 网络安全, 网络安全审计, 隐私保护, 页面缓存破坏