Linux 内核中通过 RDS + io_uring 页缓存覆写实现的本地权限提升
PinTheft 是 CVE-2026-43494 的一个高级本地 root 漏洞利用程序,该漏洞是 Linux 内核可靠数据报套接字(RDS)子系统中的一个引用计数错误。
通过将 RDS 零拷贝路径中的双重释放与 io_uring 的固定缓冲区相结合,该漏洞利用程序实现了对 SUID-root 二进制文件 的可靠 页缓存覆写,从而获得 本地权限提升 至 root。
一个晦涩网络路径中的微小会计错误,当与现代 io_uring 特性结合时,变成了一个可靠的 LPE。
net/rdsrds_message_zcopy_from_user() 中的失败路径 → 错误的 op_nents 处理iov_iter_get_pages2() 失败后的双重 put_page()CVSS 评分: ~7.8(高危)
io_uring REGISTER_BUFFERS 固定目标页面(+1024 个 FOLL_PIN 引用)sendmsg 窃取所有 1024 个固定munmap() → 干净的释放到 PCP(LIFO)struct page* 使用 IORING_OP_READ_FIXED 覆写回收的页面绕过策略:
CONFIG_INIT_ON_ALLOC_DEFAULT_ONbad_page() 检查CONFIG_RDS 和 CONFIG_RDS_TCP 的内核io_uring(kernel.io_uring_disabled=0)大多数发行版默认不易受攻击(RDS 很少启用)。
# 1. 克隆并编译
git clone https://github.com/0xBlackash/CVE-2026-43494.git
cd CVE-2026-43494
gcc -O2 -static CVE-2026-43494.c -o pintheft
# 2. 运行
sudo ./pintheft
CVE-2026-43494.c — 完整漏洞利用源代码(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: 有漏洞"
cat /proc/sys/kernel/io_uring_disabled
uname -r
献给安全研究社区的 ❤️
保持好奇,注意安全。