0xBlackash/CVE-2026-43494
GitHub: 0xBlackash/CVE-2026-43494
PinTheft 是一个利用 Linux 内核 RDS 子系统引用计数漏洞(CVE-2026-43494)通过 io_uring 页缓存覆盖实现本地权限提升的 exploit。
Stars: 2 | Forks: 2
# 🛠️ PinTheft — CVE-2026-43494
**通过 RDS + io_uring 页缓存覆盖实现 Linux 内核本地权限提升**



## 📌 概述
**PinTheft** 是一个针对 **CVE-2026-43494** 的高级本地 root exploit,该漏洞是 Linux 内核的 Reliable Datagram Sockets (RDS) 子系统中的一个引用计数 bug。
通过将 RDS 零拷贝路径中的 double-free 与 io_uring 的 fixed buffers 相结合,该 exploit 实现了对 SUID-root 二进制文件的可靠**页缓存覆盖**,从而导致**本地权限提升**至 root。
## 🧪 漏洞详情
- **组件**:`net/rds`
- **触发条件**:`rds_message_zcopy_from_user()` 中的失败路径 → 错误的 `op_nents` 处理
- **根本原因**:在 `iov_iter_get_pages2()` 失败后重复执行了 `put_page()`
- **影响**:无特权本地用户 → **root**
**CVSS 评分**:~7.8(高)
## 🎯 利用技术("PinTheft")
1. 使用 `io_uring REGISTER_BUFFERS` **固定目标页**(+1024 个 FOLL_PIN 引用)
2. 将 buffers 克隆到第二个 ring + 由 daemon 保持(防止在关闭时 unpin)
3. 使用反复失败的 RDS 零拷贝 `sendmsg` **窃取所有 1024 个 pins**
4. `munmap()` → 干净地释放给 PCP (LIFO)
5. 触发**可读 SUID 二进制文件**的页缓存回收
6. 通过悬空的 `struct page*` 使用 `IORING_OP_READ_FIXED` 覆盖回收的页
7. 执行被修改的 SUID 二进制文件 → root shell
**绕过机制**:
- `CONFIG_INIT_ON_ALLOC_DEFAULT_ON`
- `bad_page()` 检查
- io_uring 在 ring 销毁时的 unpin
## 📋 环境要求
- 启用了 `CONFIG_RDS` 和 `CONFIG_RDS_TCP` 的内核
- 启用了 `io_uring`(`kernel.io_uring_disabled=0`)
- 内核 ≥ 6.13(以获得最佳的 io_uring 特性支持)
- 系统上至少有一个**可读的** SUID-root 二进制文件
- x86_64 架构
在大多数发行版上**默认不受此漏洞影响**(RDS 很少被启用)。
## 🚀 用法
```
# 1. Clone & Compile
git clone https://github.com/0xBlackash/CVE-2026-43494.git
cd CVE-2026-43494
gcc -O2 -static CVE-2026-43494.c -o pintheft
# 2. Run
sudo ./pintheft
```
**通过 RDS + io_uring 页缓存覆盖实现 Linux 内核本地权限提升**



## 📁 文件
- `CVE-2026-43494.c` — 完整的 exploit 源码 (PinTheft)
- `README.md` — 本文档
- `backup/` — 被覆盖的 SUID 二进制文件的自动备份
## 🛡️ 缓解措施
```
# 禁用 RDS
echo "install rds /bin/false" | sudo tee /etc/modprobe.d/disable-rds.conf
echo "install rds_tcp /bin/false" | sudo tee -a /etc/modprobe.d/disable-rds.conf
sudo modprobe -r rds_tcp rds
# 禁用 io_uring(如果未使用)
echo "kernel.io_uring_disabled=2" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
```
一旦补丁可用,请**立即更新你的内核**。
## 🔍 验证
```
# 检查是否存在漏洞
modprobe -n rds_tcp && echo "RDS: Vulnerable"
cat /proc/sys/kernel/io_uring_disabled
uname -r
```
## ⚠️ 免责声明
- 此 exploit 仅用于**教育和授权测试**。
- 滥用可能会导致系统不稳定或数据丢失。
- 请务必在隔离的虚拟机中进行测试。
## 📜 致谢
- **发现与 PoC**:Ashraf Zaryouh "0xBlackash"
- **CVE 分配**:MITRE
- **公开披露**:2026 年 5 月 23 日
**怀着 ❤️ 献给安全研究社区**
*保持好奇。注意安全。*标签:Linux内核, Web报告查看器, 安全渗透, 客户端加密, 本地提权, 漏洞复现