
概念验证 — uid=1000(raken) → uid=0(root) 执行 ./sley 后,在 WSL2 上(6.6.87.2-microsoft-standard-WSL2)
针对 CVE-2026-43494(PinTheft)的单文件概念验证:一个 Linux 内核本地权限提升漏洞,利用 结合 来覆盖 SUID-root 二进制文件的页缓存。
免责声明: 本仓库仅用于 授权的安全研究、教育和防御性测试。在未经明确许可的系统上运行此程序是非法且不道德的。作者不对任何滥用行为承担责任。
| 项目 | 详情 |
|---|---|
| CVE | CVE-2026-43494 |
| 公开名称 | PinTheft |
| 组件 | net/rds — zerocopy 发送路径(rds_message_zcopy_from_user) |
| 原语 | 页面引脚失败时双重 put_page() → 窃取 FOLL_PIN 引用 |
| 武器化 | io_uring 固定缓冲区 + RDS 失败的 zerocopy → 页缓存释放后使用写入 |
| 影响 | 在易受攻击的配置上实现本地 root |
| 上游修复 | e17492979319 |
原始公开研究和 PoC 由 V12 Security 团队(Aaron Esau)发布。SLEY 是一个独立的紧凑重实现,带有样式化的终端 UI,用于实验室使用和学习。
flowchart LR
A[mmap 匿名页] --> B[io_uring: 注册固定缓冲区]
B --> C[克隆缓冲区表到第二个环]
C --> D[1024 次失败的 RDS zerocopy 发送]
D --> E[耗尽 FOLL_PIN 偏差 / 窃取引用]
E --> F[munmap → 页面释放]
F --> G[SUID 二进制页面在页缓存中被重新分配]
G --> H[过时的 io_uring 指针写入 ELF 存根]
H --> I[执行 SUID → root shell]
su、mount、passwd 等)。FOLL_PIN 偏差 ≈ 1024)。execve 该 SUID 二进制文件以 root 身份运行注入的存根。CONFIG_RDS=y 且 CONFIG_RDS_TCP=yCONFIG_IO_URING=y 且 kernel.io_uring_disabled = 0rds / rds_tcp 模块IORING_REGISTER_CLONE_BUFFERS APIsudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# 或你发行版上等效的头文件包
# 已修补?(示例 — 根据你的发行版调整)
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 # 期望 0
gcc -O2 -Wall -Wextra -o sley sley.c
静态链接(可选,用于最小化实验室镜像):
gcc -O2 -static -o sley sley.c
./sley
所有状态输出发送到 stderr(ANSI 256 色 UI、进度条、分阶段日志)。确保你的终端支持 UTF-8 和 真彩色/256 色 以显示框线 UI。
示例阶段:
PHASE 1 │ 侦察
PHASE 2 │ 内存和 io_uring 设置
PHASE 3 │ 引脚引用盗窃(RDS zerocopy)
PHASE 4 │ 页缓存覆盖和提权
在成功利用的配置上,链完成并移交到被覆盖第一页的已发现 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 # 本文档
├── proof-of-concept.jpg # 截图:成功 LPE(uid 1000 → root)
├── sley.c # 单文件 PoC + 终端 UI
└── .gitignore
本软件 按原样 提供,用于研究和教育。你负责遵守适用法律,并在测试任何你不拥有的系统之前获得书面授权。
MIT — 如果添加,请参阅仓库许可证文件。请负责任地使用。