(7.1分)CVE-2025-39682:Linux内核TLSUAF本地提权

admin 2026-09-22 05:44:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析Linux内核net/tls子系统CVE-2025-39682Use-After-Free漏洞,CVSS7.1分,已确认在野利用。漏洞源于tlsswrecvmsg对零长度TLS记录处理不当,导致引用计数破坏,本地低权限用户可提权至root。影响内核6.0至6.16.3及6.17-rc1/rc2版本。文章提供完整触发序列、检测排查方法及升级修复建议,并给出红队视角的实战价值分析。 综合评分: 85 文章分类: 漏洞分析,漏洞预警,应急响应,红队,安全运营


(7.1分) CVE-2025-39682:Linux内核TLS UAF本地提权

红队安全圈 红队安全圈

红队安全圈

2026年9月19日 08:06 重庆

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

已确认在野利用的 Linux 内核本地提权洞:net/tls 一条零长度记录就能打碎引用计数,低权限直接够到 root。

01  漏洞速览

Linux 内核 net/tls 子系统存在一个 Use-After-Free 漏洞(CVE-2025-39682),CVSS 3.1 评分 7.1,本地低权限攻击者可以借此把权限提到 root。最要命的信号是:CISA KEV 已确认在野利用,说明有真实攻击者在用,不只是实验室玩具。跑着内核 6.0 到 6.16 的机器,尤其是多用户服务器和云主机,都需要立刻排查。

漏洞编号CVE-2025-39682

影响产品Linux Kernel(net/tls)

影响版本6.0 – 6.16.3 及 6.17-rc1/rc2(详见下文)

漏洞类型CWE-416 Use After Free

危害等级CVSS 3.1 7.1 High(本地提权)

是否在野是,已进 CISA KEV

公开 PoC有,崩溃 PoC + 完整分析已公开

攻击前提本地低权限账号 + 启用 kTLS 接收路径

影响面多用户 Linux 服务器本地提权到 root

02  漏洞成因

根因在 tls_sw_recvmsg 对零长度 TLS 记录的处理。正常约定是:每次 recvmsg() 要么只处理连续的 DATA 记录,要么处理一条非 DATA 记录。但当一条零长度记录从 rx_list 取出时,这个约定被打破——后续 TLS 记录会按错误的 zero-copy 和排队假设继续处理。

具体链条:

  1. copied == 0 时函数继续循环收包。一条零长度解密记录正好触发这个条件。

  2. 下一轮迭代中,如果新记录的 content type 与先前建立的 control 不一致,tls_record_content_type() 返回 0。

  3. 返回值小于等于 0 走错误路径,把 darg.skb(其实就是 strp 的 anchor)挂进 ctx 的 rx_list。

  4. 问题在这:当 darg.zc == 1(zero-copy 模式激活)时,把 anchor 挂进 rx_list 是禁止的。这会破坏 anchor 的 frag_list 和引用计数。

后果是:socket 关闭时,tls_sw_release_resources_rx 遍历已释放的内存,UAF 在 kfree_skb_list_reason 处被 KASAN 确认。这块 SKB 最早由 tcp_sendmsg_locked 分配,在错误重新入队之前已经被 tls_strp_msg_done 释放。

一句话总结:错误路径把一个 zero-copy 模式下的 anchor SKB 二次入队,引用计数被打乱,释放后还在用。

03  影响范围

受影响版本(升级到以下版本之上即安全):

6.0      – 6.1.148

6.2      – 6.6.102

6.7      – 6.12.43

6.13     – 6.16.3

6.17-rc1 / 6.17-rc2

补丁已随主线发布。KEV 条目提到部分受影响产品可能已 EoL/EoS——这类机器打不了补丁,只能换版本或做缓解。

04  利用分析:触发序列已公开

研究者已发布完整触发序列,六步复现(在 Linux 6.12.41 上实测触发 KASAN UAF):

步骤 1:发送一条 TLS Application Data 记录(type 0x17,内容 Hello world)。

步骤 2:发送一条零长度 TLS Handshake 记录(type 0x16,空明文)。

步骤 3:用 read(conn, buf, 0x100) 部分消费第一条记录,让下一次调用时 copied == 0。

步骤 4:再发送一条 Application Data 记录(type 0x17)。

步骤 5:调用 recvmsg——handshake 记录与后续 data 记录的 content type 不匹配,触发漏洞路径:darg.zc == 1 时错误地把 anchor SKB 入队 rx_list。

步骤 6:关闭 socket——UAF 在 tls_sw_release_resources_rx 中触发。

公开的崩溃 PoC 本身只让内核崩溃(KASAN 报 slab-use-after-free)。但从崩溃到提权是经典路径:UAF 意味着可以堆喷射占位被释放的 SKB 内存,配合跨缓存攻击或 page 级喷射替换成可控对象,进而改写函数指针或核心结构完成 LPE。研究者的分析标题就写明目标是 privilege escalation。

利用门槛评估:本地、低权限、复杂度低(AC:L)。难点在于 kTLS 接收路径需要目标进程真的在用 kTLS——这缩小了实战面,但在负载均衡、加密代理类服务里并不罕见。

05  检测与排查

版本排查(第一步先看内核版本是否在受影响区间):

uname -r

确认 kTLS 是否在用——看进程有没有设置 TCP_ULP tls,服务端场景直接查模块和 socket 状态:

ss -tinm | grep tls

lsmod | grep tls

日志排查:内核日志出现过 KASAN 的 slab-use-after-free,位置在 kfree_skb_list_reason 或调用栈带 tls_sw_release_resources_rx,说明漏洞已被触发。在野利用场景下,攻击者得手后还会尝试提权,需结合 auditd 的 setuid/execve 异常记录一起看。

06  修复建议

  1. 升级内核到包含补丁的版本:6.1.149+ / 6.6.103+ / 6.12.44+ / 6.16.4+ / 6.17-rc3+(或发行版 backport 版本)。

  2. 暂时无法升级的:确认业务没有启用 kTLS 接收路径可显著降低风险——漏洞入口在 tls_sw_recvmsg,不用 kTLS 就打不到。

  3. EoL/EoS 系统(KEV 明确点名):没有补丁可打,尽快迁移到受支持版本。

  4. 多用户服务器和容器宿主机:限制本地不可信用户,是所有内核 LPE 的通用缓解。

07  红队视角

这个洞的实战价值在于:在野确认 + 本地低门槛。KEV 收录说明已有攻击者把它塞进利用链,很可能作为容器逃逸或多阶段入侵里的提权环节——拿到 Web shell 后从低权限服务账号提到 root,一步到位。

对防守方的提示:

  • 面向公网的服务就算本身无此漏洞,落入的账号一旦能触发本地内核漏洞,边界就没了。7.1 分的本地提权在多租户环境里实际影响远超分数。

  • 排查优先级:容器宿主机 > 多用户跳板机 > 单用途加密服务节点。

  • 类似历史案底:net/tls 这几年不是第一次出事,tls_setsockopt 系列和 tls_sw_recvmsg 早前的处理缺陷都报过。这条接收路径建议整体纳入重点审计范围。

后续如果出现可用的完整 LPE exploit,会跟进分析。

08  POC 链接

STAR Labs 的完整分析(触发序列 + 崩溃 PoC 源码 + TLS 记录生成脚本):

https://starlabs.sg/advisories/25/25-39682/

CISA KEV 条目:

https://www.cisa.gov/known-exploited-vulnerabilities-catalog#CVE-2025-39682

如果文章对您有收获,欢迎关注、点赞、推荐、转发。

— END —


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:红队安全圈 红队安全圈 红队安全圈《(7.1分) CVE-2025-39682:Linux内核TLS UAF本地提权》

评论:0   参与:  0