
Ubuntu Linux内核曝出高危漏洞,本地攻击者可利用该漏洞提升权限,最终在受影响系统上获取root访问权限。该漏洞在TyphoonPWN 2025安全会议上披露,源于af_unix子系统的引用计数失衡问题,导致释放后重用(UAF)漏洞。研究人员已提供完整的PoC利用代码进行验证。
此漏洞影响运行6.8.0-60-generic内核版本的Ubuntu 24.04.2系统,突显了主流Linux发行版在内核补丁管理方面面临的持续挑战。
漏洞根源分析
漏洞的根本原因在于Ubuntu对上游Linux内核补丁的部分实现存在缺陷。这些补丁原本旨在修复af_unix域套接字中的引用计数错误——该套接字通过允许进程相互发送文件描述符来实现进程间通信。
历史上,该子系统采用垃圾回收机制处理循环引用。但最近的上游变更改用新算法,同时调整了带外(OOB)套接字缓冲区内核(skb)引用的管理方式。
具体而言,补丁移除了af_unix.c文件中queue_oob函数内的skb_get()调用,以避免对u->oob_skb(通过MSG_OOB标志发送的OOB数据指针)进行不必要的引用计数增加,并相应地在垃圾回收中避免减少其计数。
Ubuntu内核提权机制
基于较旧6.8.12版本的Ubuntu内核保留了传统垃圾回收机制,但错误地仅应用了af_unix.c文件的修改,遗漏了对garbage.c文件的更新。
这种不匹配导致oob_skb在分配时丢失一个引用,但在套接字关闭时却经历两次递减:一次通过unix_gc中的kfree_skb,另一次通过unix_release_sock,最终触发对skbuff_head_cache slab中256字节struct sk_buff对象的UAF漏洞。
SSD Disclosure指出,虽然两个函数都可能释放该对象,但在实际利用中,总是先由unix_gc释放对象,再由unix_release_sock使用已释放的内存。
漏洞利用技术细节
要实现可靠的UAF利用,需要分离释放和使用阶段。攻击者通过在后续sendmsg调用期间触发高unix_tot_inflight计数(超过16,000)来立即触发垃圾回收,这会调用wait_for_unix_gc。
为了填补unix_release_sock作为TWA_RESUME工作项在系统调用后执行前的时间间隙,漏洞利用程序使用FUSE文件系统的mmap缓冲区暂停skb_copy_datagram_from_iter中的执行,通过自定义FUSE_read处理程序使内核线程休眠数秒。
随后发起跨缓存攻击释放专用slab,通过环回接口上的数据包套接字喷洒受控的pg_vec结构来回收页面。覆盖已释放的skb可控制其在skb_release_head_state中的析构函数调用,从而实现RIP和RDI劫持。
KASLR绕过采用Entrybleed的预取侧信道变体,在无KPTI的系统上通过统计时序分析实现100%成功率。最终,ROP链将modprobe_path覆盖为"/tmp/x",这是一个通过usermodehelper调用获取root权限的shell脚本。
漏洞修复建议
Canonical迅速做出响应,于2025年9月18日发布更新内核,完整合并上游修复以平衡两个修改文件中的引用计数。受影响版本用户应立即通过apt upgrade linux-generic命令更新至6.8.0-61或更高版本内核。
此事件凸显了发行版内核选择性回溯移植补丁的风险,敦促管理员密切关注安全公告。虽然尚未发现大规模利用,但公开的PoC提高了企业环境打补丁的紧迫性。
参考来源:
Ubuntu’s Kernel Vulnerability Let Attackers Escalate Privileges and Gain Root Access
LPE via refcount imbalance in the af_unix of Ubuntu’s Kernel
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



