letsr00t/CVE-2026-43494-PinTheft-PoC

GitHub: letsr00t/CVE-2026-43494-PinTheft-PoC

SLEY 是一个针对 Linux 内核 CVE-2026-43494 本地提权漏洞的概念验证工具,演示了如何利用 RDS zerocopy 与 io_uring 的组合链实现从普通用户到 root 的提权。

Stars: 0 | Forks: 0

# SLEY — PinTheft PoC (CVE-2026-43494)

SLEY PoC — uid 1000 to root on WSL2

概念验证 — 在 WSL2 (6.6.87.2-microsoft-standard-WSL2) 上执行 ./sley 后,uid=1000(raken)uid=0(root)

CVE-2026-43494 Linux LPE io_uring RDS

针对 **[CVE-2026-43494](https://nvd.nist.gov/vuln/detail/CVE-2026-43494)** (*PinTheft*) 的单文件概念验证:这是一个 Linux 内核本地提权漏洞,它将 **RDS zerocopy 引用计数 bug** 与 **io_uring fixed buffers** 串联在一起,用于覆盖 SUID-root 二进制文件的页缓存 (page cache)。 ## 概述 | 项目 | 详情 | |------|--------| | **CVE** | [CVE-2026-43494](https://nvd.nist.gov/vuln/detail/CVE-2026-43494) | | **公开名称** | PinTheft | | **组件** | `net/rds` — zerocopy 发送路径 (`rds_message_zcopy_from_user`) | | **原语 (Primitive)** | 页面 pin 失败时执行双重 `put_page()` → 窃取 `FOLL_PIN` 引用 | | **武器化 (Weaponization)** | io_uring fixed buffer + RDS zerocopy 失败 → 页缓存 UAF 写入 | | **影响** | 在易受攻击的配置下获取本地 root 权限 | | **上游修复** | [`e17492979319`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e174929793195e0cd6a4adb0cad731b39f9019b4) | 最初的公开研究和 PoC 由 **V12 Security** 团队 发布。**SLEY** 是一个独立的、紧凑的重新实现版本,带有专为实验室使用和学习设计的终端 UI。 ## 工作原理 ``` flowchart LR A[mmap anonymous page] --> B[io_uring: register fixed buffer] B --> C[Clone buffer table to 2nd ring] C --> D[1024× failing RDS zerocopy sends] D --> E[Drain FOLL_PIN bias / steal refs] E --> F[munmap → page freed] F --> G[SUID binary page reclaimed in page cache] G --> H[Stale io_uring ptr writes ELF stub] H --> I[exec SUID → root shell] ``` 1. **侦察** — 绑定到 CPU 0,定位一个可读的 SUID 二进制文件(`su`、`mount`、`passwd` 等)。 2. **io_uring 设置** — 将匿名页注册为 fixed buffer(`FOLL_PIN` 偏差 ≈ 1024)。 3. **Pin 窃取** — 发起大量失败的 RDS zerocopy 发送;每次失败都可能在首个被 pin 的页面上多减少一个引用。 4. **回收与覆盖** — 解除映射释放页面;重新打开 SUID 目标与页缓存回收产生竞争;陈旧的 fixed-buffer 元数据允许向缓存中写入一个微小的 x86_64 ELF stub。 5. **提权 (Privesc)** — 对该 SUID 二进制文件执行 `execve` 将以 root 身份运行注入的 stub。 ## 要求 ### 内核 / 配置 - 存在 RDS bug 的易受攻击(未打补丁)的 Linux 内核 - `CONFIG_RDS=y` 和 `CONFIG_RDS_TCP=y` - `CONFIG_IO_URING=y` 和 `kernel.io_uring_disabled = 0` - `rds` / `rds_tcp` 模块已加载(或可由非特权用户自动加载) - 公开利用链所使用的 `IORING_REGISTER_CLONE_BUFFERS` API 需要 **内核 ≥ 6.13** - 此 PoC 中嵌入的 shell ELF payload 需要 **x86_64** 架构 ### 构建工具 ``` sudo apt install build-essential linux-libc-dev # Debian/Ubuntu # 或您的 distro 上对应的 headers package ``` ### 权限 - 在**易受攻击的**主机上,非特权本地用户即可满足要求(这就是其威胁模型) - **请勿**在生产系统上运行 ### 检查暴露情况(只读) ``` # 已修补?(示例 — 请根据您的 distro 进行调整) uname -r grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true # RDS 可用? grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null lsmod | grep -E '^rds' # io_uring 已启用? cat /proc/sys/kernel/io_uring_disabled # expect 0 ``` ## 构建 ``` gcc -O2 -Wall -Wextra -o sley sley.c ``` 静态链接(可选,用于精简的实验室镜像): ``` gcc -O2 -static -o sley sley.c ``` ## 使用方法 ``` ./sley ``` 所有状态输出都会发送到 **stderr**(ANSI 256 色 UI、进度条、分阶段日志记录)。请确保你的终端支持 **UTF-8** 和 **truecolor/256 色**,以正常显示边框绘制 UI。 示例阶段: ``` PHASE 1 │ Reconnaissance PHASE 2 │ Memory & io_uring setup PHASE 3 │ Pin reference theft (RDS zerocopy) PHASE 4 │ Page cache overwrite & privesc ``` ### 预期结果(易受攻击的主机) 在成功利用的配置上,利用链将完成执行并移交给被覆盖了首页的已发现 SUID 二进制文件——如果竞争条件和内核状态合适,将获得一个 **root shell**。 在已打补丁的内核、经过安全加固的主机,或者缺少 RDS/io_uring 的系统上,PoC 将提前失败(例如:找不到 SUID 目标、`mmap`/`io_uring`/`socket` 报错等)。 ## 缓解措施 | 操作 | 备注 | |--------|-------| | **为内核打补丁** | 应用包含提交 `e17492979319` 的稳定版修复 | | **禁用 RDS** | 如果不需要,执行 `modprobe -r rds_tcp rds`(并阻止自动加载) | | **限制 io_uring** | 通过 sysctl 设置 `kernel.io_uring_disabled=1` 或 `2` | | **最小权限原则** | 移除不必要的 SUID 二进制文件;使用具有强化安全配置文件的容器 | | **监控** | 对突发的 RDS zerocopy 失败及 io_uring 缓冲区注册模式发出警报 | 特定发行版的安全公告可能会提供向后移植的补丁——请持续关注你的供应商的内核安全队列。 ## 项目结构 ``` . ├── README.md # This file ├── proof-of-concept.jpg # Screenshot: successful LPE (uid 1000 → root) ├── sley.c # Single-file PoC + terminal UI └── .gitignore ``` ## 参考 - [NVD — CVE-2026-43494](https://nvd.nist.gov/vuln/detail/CVE-2026-43494) - [oss-security — PinTheft 讨论](https://www.openwall.com/lists/oss-security/2026/05/21/2) - [内核修复提交](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e174929793195e0cd6a4adb0cad731b39f9019b4) ## 法律声明 本软件按“原样”提供,仅供研究和教育之用。在对非你所有的任何系统进行测试之前,你有责任遵守适用法律并获得书面授权。 ## 许可证 MIT — 如果添加了仓库许可证文件,请参阅该文件。请负责任地使用。
标签:Linux内核, PoC, Web报告查看器, 安全渗透, 客户端加密, 暴力破解, 本地提权, 漏洞验证代码