文章总结: Linux内核net/rds零拷贝发送功能存在CVE-2026-43502提权漏洞,因清理函数rdsmessagepurge()判断零拷贝消息逻辑错误,导致内存页重复释放,本地低权限用户可利用竞态条件提权至root。影响4.17至修复前版本,CVSS评分7.8。建议升级至修复版本,并关注发行版安全公告。 综合评分: 75 文章分类: 漏洞分析,漏洞预警
【漏洞POC已公开】Linux RDS 爆出提权漏洞 一块内存放两次,root就到手了
YGnight YGnight
night安全
2026年9月9日 08:00 四川
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
一、漏洞描述
Linux又爆出了一个提权漏洞,漏洞编号是CVE-2026-43502 ,漏洞的产生是在 Linux 内核 net/rds 的零拷贝发送这个位置。清理时选错了释放方式,本地低权限账号可以拿来提权。
这种发送不复制用户缓冲区。内核把用户态的内存页固定住,直接拿去发送,发完再通知用户态回收。这个模式下内核只握着一次引用,收尾方式跟普通发送不一样。
清理函数 rds_message_purge() 判断一条消息是不是零拷贝时,看的是它有没有挂到 socket 上。要是发送在页固定之后、挂载之前失败,这个判断就错了,页会按普通发送的方式被放掉,同一块内存被多放一次。
| | | | — | — | | CVE 编号 | CVE-2026-43502 | | 官方标题 | net/rds: handle zerocopy send cleanup before the message is queued | | 影响组件 | 内核 net/rds,零拷贝发送 | | 漏洞类型 | 释放方式选错 · 内存页重复释放 · 本地提权 | | CVSS 评分 | 3.1 为 7.8;SUSE 自评 5.5 | | 利用条件 | 本地账号;rds 与 rds_tcp 模块可用;至少两个 CPU | | 实测环境 | openSUSE / SLE 15 SP6,内核 6.4.0-150600 |
官方 CVE 记录给出的版本范围如下。4.17 之前的分支不含零拷贝发送支持,不在影响范围内。
| 版本分支 | 状态 | | — | — | | 4.17 之前 | 不受影响 | | 4.17 至修复前 | 受影响 | | 5.10.258 及以后 | 已修复 | | 5.15.209 及以后 | 已修复 | | 6.1.175 及以后 | 已修复 | | 6.6.140 及以后 | 已修复 | | 6.12.88 及以后 | 已修复 | | 6.18.30 及以后 | 已修复 | | 7.0.7 及以后 | 已修复 | | 7.1 | 已修复 |
两套口径差在评估范围。kernel.org 给 7.8,机密性、完整性、可用性都按高算。SUSE 自评 5.5,只认可用性影响,理由是要读写内存得先赢下竞态。SUSE 已把 6.4.0-150600 标为已处理,具体更新包看发行版公告。
■ 二、漏洞原理
问题在清理函数怎么判断一条消息是不是零拷贝的。改动前的代码简化后是这样。
static void rds_message_purge(struct rds_message *rm) { bool zcopy = false;
if (rm->m_rs) { // 消息已挂到 socket if (rm->data.op_mmp_znotifier) zcopy = true; // 只在这个分支里置位 }
for (i = 0; i < rm->data.op_nents; i++) { if (!zcopy) __free_page(sg_page(&rm->data.op_sg[i])); else put_page(sg_page(&rm->data.op_sg[i])); } }
zcopy 只在消息已经挂上 socket 的那个分支里被打开。消息还没挂上去就失败时它一直是 false,释放循环于是走 __free_page。
两条路的差别就一次计数。
put_page 减一次,减到零才真放。__free_page 不看计数,直接把页塞回空闲链表。
零拷贝的页,内核手上还握着一次引用,正常该用 put_page 还掉。走了 __free_page,这块页被当成空闲页分配出去,引用还挂着,用户态的映射也还在。
没入队时还漏还了一次固定页额度,影响比上面小。
补丁把判据换成了 op_mmp_znotifier 本身,另外补一个分支接住没入队的情况。
- znotifier = rm->data.op_mmp_znotifier; // 判据换成它本身
- rm->data.op_mmp_znotifier = NULL;
- zcopy = !!znotifier;
if (rm->m_rs) { if (znotifier) { rds_rm_zerocopy_callback(rs, znotifier); rds_wake_sk_sleep(rs); }
- } else if (znotifier) { // 没入队也要清理
- mm_unaccount_pinned_pages(&znotifier->z_mmp);
- kfree(rds_info_from_znotifier(znotifier)); }
要走到这条路径,得让发送在页固定之后、入队之前失败。公开验证材料的做法是填满 socket 发送缓冲区,让 sendmsg 卡住,再由另一个线程在 100 微秒后发信号打断,sendmsg 拿 EINTR 返回。同一时间,那块页所属的对象被另一个线程销毁。
sent = sendmsg(rds_fd, &message, MSG_ZEROCOPY); // 卡在等发送空间
// 另一个线程,延迟 100 微秒 syscall(SYS_io_destroy, victim_aio_ctx); // 先放一次 pthread_kill(sender_thread, SIGUSR1); // 打断,返回 EINTR
两次释放叠在一起,这块页进了空闲链表,计数没归零,用户态映射还在。
这块坏页被拿去当自己的页表页。x86 每级页表占一整个物理页,一页管 512 个表项,覆盖 2MB 地址。
公开验证材料反复合并、拆分大页来调整分配顺序,把这块坏页顶到指定地址上。页表页还在自己的地址空间里,改它的表项就是改自己的映射,512 个表项全指过去,这 2MB 就成了读写物理内存的窗口。
窗口以 2MB 步长扫过去,找到内核里存 /sbin/modprobe 的那个数组,换成自己的 helper,再执行一个内容全是 0xff 的文件。内核认不出这个文件的格式,会去调 modprobe_path 里的程序,替换后的 helper 于是以 root 跑起来。
chown(ROOT_SHELL, 0, 0); chmod(ROOT_SHELL, 04755); // root 属主 + setuid
一份 shell 副本被改成 root 属主并置上 setuid,再跑一次就是 root。收尾时 modprobe_path 会被改回原值。
这条链有两个前提。rds 模块在多数发行版里默认不加载;100 微秒是写死的值,换机器要重调,竞态输了内核日志会报 Bad page state。
三、修复建议
升级到对应稳定分支的修复版本,版本对照见上文。发行版内核以各自安全公告为准,SLE 与 openSUSE 15 SP6 关注 6.4.0-150600 的后续更新。
近期值得重点关注的漏洞预警
【紧急漏洞预警】nacos爆出权限绕过漏洞,可以创建管理员账户,经过分析有点出处(已复现,exp脚本已编写)
Tenda光猫爆出严重漏洞,目前无补丁(POC已公布
13 行补丁,堵住Linux能拿 root 的内核洞(EXP已公开)
48 字节,换走一台 Windows 的 SYSTEM(CVE-2026-62735漏洞POC已公开)
【漏洞预警】linux删个网桥就能提权root?目前没有补丁(POC已公开)
【漏洞预警】Linux三年前补上的洞,又一次被挖开了
【情报】支付宝8.2亿数据泄露?给同事说一声,别自己吓自己
【漏洞预警】自己注册个号,就能搬空别人的 Magento 订单和支付卡(POC已公开)
【漏洞预警】Next.js 爆出新漏洞,不用登录实现命令执行(POC已公开)
【漏洞补丁绕过预警】Redis CVE-2026-23479变种高危漏洞,EXP已公开
【漏洞补丁绕过】超 30 万 WordPress 站点受影响,Forminator 文件上传漏洞(附POC)
【漏洞预警】Exchange爆出RCE漏洞,利用Exchange 帮另一台 Exchange 开门(POC已公开)
【漏洞预警】不用登录,一个请求就能让 GeoServer 乖乖执行命令(POC已公开)
【漏洞预警】Keycloak不登录就能接管任意账户,双重验证也拦不住
【漏洞预警】 8月WebLogic公布了9个漏洞,有一个需要重点关注
【漏洞预警】近期MongoDB 公布了5个漏洞,最严重的一个可以不认证、远程就能拿下你电脑
【0DAY漏洞】 全球5G手机芯片厂商之一的紫光展锐SOC存在RCE漏洞,影响数十家手机厂商,还未发布补丁
【漏洞告警】安卓 14 到 16 全中招,通讯录 SQL 注入漏洞正在抄家(POC已公开)
【漏洞预警】紧急排查,SMB服务再曝新漏洞,利用脚本已公开
【漏洞预警】不用输密码,对方已经接管你的Mac:官方补丁公布macOS存在未鉴权RCE漏洞
【0day漏洞预警】MariaDB 13 爆 9.8 分 RCE 链:最低 USAGE 权限就能远程执行命令
VMware 爆 5 个洞,两个 9.8 不用密码就能打穿 vCenter
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:night安全 YGnight YGnight《【漏洞POC已公开】Linux RDS 爆出提权漏洞 一块内存放两次,root就到手了》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论