yanxinwu946/CVE-2026-46331
GitHub: yanxinwu946/CVE-2026-46331
针对 Linux 内核 act_pedit 模块页缓存损坏漏洞(CVE-2026-46331)的本地提权利用代码,支持多种主流 Linux 发行版。
Stars: 4 | Forks: 0
# PACKET_EDIT_MEME - CVE-2026-46331
net/sched `act_pedit` 部分 COW 页缓存损坏(问题提交 899ee91156e5,
存在于 v5.18 .. 修复于 v7.1-rc7)。`packet_edit_meme.c` 将其转化为
无特权本地 root:一个 userns CAP_NET_ADMIN 子进程用
`setgid(0)+setuid(0)+execve("/bin/sh")` shellcode 覆盖了 setuid-root 二进制文件的缓存 ELF 元数据。
```
make
./packet_edit_meme
./packet_edit_meme --ubuntu # AppArmor-gated Ubuntu: aa-exec bypass first
```
## 目标
| 发行版 | 内核 | 标志 | 结果 |
|---------------------|-------------------|------------|--------|
| RHEL 10.0 | 6.12.0 | (无) | ROOT |
| Debian 13 trixie | 6.12.90+deb13.1 | (无) | ROOT |
| Ubuntu 24.04.4 | 6.17.0-22 | `--ubuntu` | ROOT |
| Alpine edge | 7.0.10-0-stable | (无) | ROOT |
## Alpine PIE 修复
Alpine Linux (musl) 编译的 PIE 可执行文件中,可执行文件的 PT_LOAD
段从文件偏移量 ≥ `0x1000` 处开始 —— 超出了 pedit TCP 头部 511 字节的偏移量
限制。ELF 头和程序头占据第一个
只读 PT_LOAD(文件偏移量 0)。此适配的 exploit:
1. **使页 0 可执行**,方法是在文件偏移量 `0xB4`(phdr[2] + 4)处的第一个 PT_LOAD 的
`p_flags` 字段中添加 `PF_X`。
2. **拆分 shellcode** 以避免损坏关键的 LOAD 程序头:
- `e_entry` → `0x28`(内核在 exec 时不会检查的 `e_shoff` 字段
)。
- 文件偏移量 `0x28` 处的 **跳板**:一个 5 字节的 `jmp 0x1C8`。
- 文件偏移量 `0x1C8` 处的 **Shellcode**,覆盖内核在 exec 期间忽略的
PT_NOTE 程序头。
3. **以 `/bin/mount` 为目标**(或非 `nosuid` 文件系统上任何全局可读的 setuid-root 二进制文件)—— Alpine 的 `/bin/su` (-> `/bin/bbsuid`) 具有
`---s--x--x` 权限,无特权用户无法打开它。
## Ubuntu AppArmor 限制
Ubuntu 通过两个 sysctl 拒绝无限制的无特权 userns:
```
kernel.apparmor_restrict_unprivileged_userns # denies unconfined userns creation
kernel.apparmor_restrict_unprivileged_unconfined # forces unconfined change_profile to STACK,
# so an aa-exec permissive profile cannot
# shed the userns restriction
```
`--ubuntu` 通过 `aa-exec -p {trinity,chrome,flatpak}`(包含 `userns,` 规则的配置文件
)重新执行。
| Ubuntu | userns | 无限制 | aa-exec 绕过 |
|------------------|--------|------------|----------------|
| 24.04.4 | 1 | 0 | 有效 |
| 26.04 | 1 | 1 | 已关闭 |
## 构建依赖
一个静态的 `x86_64-linux-gnu` 交叉编译器:
```
# Debian / Ubuntu
apt install gcc-x86-64-linux-gnu
# Alpine
apk add gcc musl-dev
```
标签:CSV导出, Web报告查看器, 内核漏洞, 安全渗透, 客户端加密, 本地提权