【漏洞POC已公开】LinuxRDS爆出提权漏洞一块内存放两次,root就到手了

admin 2026-09-10 04:40:44 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 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就到手了》

评论:0   参与:  0