漏洞预警 | Linux内核RDS零拷贝与io_uring组合本地提权漏洞(PinTheft)
| |
| |
| |
| |
| |
| Linux内核(启用RDS、RDS_TCP、io_uring) |
| |
| |
近期,互联网上披露了PinTheft漏洞,该漏洞利用Linux内核RDS(Reliable Datagram Sockets)零拷贝发送路径中的双重释放(double-free)缺陷,结合io_uring固定缓冲区机制,可将引用计数漏洞转化为页缓存覆盖,最终实现本地普通用户到root的权限提升。为避免您的业务受影响,建议您及时开展安全风险自查。Linux 内核(Linux Kernel)是 Linux 操作系统的核心与“大脑”。它负责管理系统的所有软硬件资源,确保各个程序能够公平、高效地共享 CPU、内存和硬盘等硬件资源。RDS(Reliable Datagram Sockets)是Linux内核提供的一种可靠数据报套接字协议,主要用于集群通信场景。io_uring是Linux内核的高性能异步I/O接口,广泛应用于现代Linux系统的高并发I/O处理。据描述,该漏洞存在于rds_message_zcopy_from_user()函数中。该函数在RDS零拷贝发送路径中逐个固定(pin)用户页面,若后续页面发生缺页故障(page fault),错误处理路径会释放已固定的页面,而后续的RDS消息清理流程会再次释放这些页面,因为scatterlist条目和条目计数在zcopy通知器被清除后仍然有效。每次失败的零拷贝发送都可以从第一个页面窃取一个引用。攻击者利用io_uring注册固定缓冲区,给页面施加1024个FOLL_PIN引用,然后通过失败的RDS零拷贝发送窃取这些引用,释放页面后将其重新回收为SUID-root二进制文件的页缓存,再利用过时的io_uring固定缓冲区页面指针覆盖页缓存内容,执行被篡改的SUID二进制文件即可获得root权限。漏洞影响的产品和版本:
- 启用CONFIG_RDS、CONFIG_RDS_TCP、CONFIG_IO_URING的Linux内核
- x86_64架构(PoC中嵌入的ELF载荷为x86_64)
- 确认Arch Linux默认启用RDS模块,受影响最为直接;其他常见发行版默认未启用RDS模块
据daydaymap数据显示互联网存在285,170,610个资产,国内风险资产分布情况如下。rmmod rds_tcp rds printf 'install rds /bin/false\ninstall rds_tcp /bin/false\n' > /etc/modprobe.d/pintheft.conf
2、官方修复- 关注Linux内核官方补丁,补丁已由Aaron Esau提交至内核邮件列表:
https://lore.kernel.org/netdev/20260505234336.2132721-1-achender@kernel.org/
- 检查系统是否加载了rds或rds_tcp内核模块:lsmod | grep rds
- 检查是否启用了CONFIG_RDS、CONFIG_RDS_TCP、CONFIG_IO_URING
- 检查系统SUID-root二进制文件的完整性,留意异常行为
https://seclists.org/oss-sec/2026/q2/605https://lore.kernel.org/netdev/20260505234336.2132721-1-achender@kernel.org/https://www.ddpoc.com/DVB-2026-11231