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 ChatGPT Image May 23, 2026, 09_07_08 AM **通过 RDS + io_uring 页缓存覆盖实现 Linux 内核本地权限提升** ![Linux](https://img.shields.io/badge/Linux-Kernel-red?style=for-the-badge) ![Exploit](https://img.shields.io/badge/Exploit-Working-brightgreen?style=for-the-badge) ![Architecture](https://img.shields.io/badge/Architecture-x86__64-yellow?style=for-the-badge)
## 📌 概述 **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 ``` CVE-2026-43494 ## 📁 文件 - `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报告查看器, 安全渗透, 客户端加密, 本地提权, 漏洞复现