新型利用Linux内核“释放后使用”漏洞的技术被发现

admin 2025-12-16 16:32:43 安全新闻 来源:ZONE.CI 全球网 0 阅读模式

研究人员发现一种新型技术,可利用 Linux 内核中一处复杂的 “释放后使用”(UAF)漏洞,成功绕过现代安全防护措施,获取 root(根)权限。 该技术针对的漏洞编号为 CVE-2024-50264,这是 AF_VSOCK 子系统中一处难以利用的竞态条件漏洞,因其复杂性曾获 “Pwnie 奖”(网络安全领域知名奖项)。该漏洞于 Linux 4.8 版本中引入,在利用过程中存在诸多重大挑战。 据亚历山大・波波夫(Alexander Popov,研究人员)介绍,非特权用户即可触发该漏洞,但利用过程存在严格限制:包括不稳定的竞态条件、极短的内存破坏时间窗口,以及尝试利用时导致内核崩溃的多种可能性。 最初的漏洞利用策略极为复杂,涉及大规模内存喷洒(memory sprays)以及 SLUBStick、Dirty Pagetable 等高级技术。

Linux 内核 “释放后使用” 漏洞

为寻求更简洁的利用路径,研究人员设计了一种以msg_msg内核对象为核心的新方法。该方法的关键在于,可在不导致内核挂起的前提下,对msg_msg对象进行破坏。

 

通常情况下,对msg_msg对象执行 “释放后使用” 写入操作会失败 —— 因为其指针字段m_list.prev非零,内核尝试获取自旋锁(spinlock)时会导致系统挂起。

 

研究人员通过对消息队列的巧妙操控,提出了如下解决方案:
  1. 将消息队列填充至接近满容量的状态,仅留下少量空闲空间;
  2. 利用程序尝试发送目标msg_msg对象:由于队列已满,内核会分配该对象,但会阻塞msgsnd()系统调用,迫使其等待队列空闲空间;
  3. 在系统调用处于阻塞状态时,触发 “释放后使用” 漏洞,对处于等待状态的msg_msg对象中的字段进行破坏;
  4. 最后,释放消息队列中的部分空间,让被阻塞的系统调用恢复执行。此时内核会将已被破坏的msg_msg对象添加至队列,过程中会自动修复被破坏的链表指针,从而避免系统崩溃。

通过这种技术,即便在复杂条件下,也能从 “释放后使用” 写入操作中构建出可靠的漏洞利用原语(exploit primitive),且无需提前泄露内核信息。

绕过内核防御机制

要成功执行攻击,还需克服其他多项障碍。 研究人员通过跨缓存攻击(cross-cache attack),将已释放的virtio_vsock_sock对象替换为msg_msg对象,从而绕过CONFIG_RANDOM_KMALLOC_CACHES等内核硬化(kernel hardening)特性。此外,“释放后使用” 写入操作的执行速度过快,曾导致该攻击难以稳定生效。 亚历山大表示,为解决这一问题,研究人员采用了一种技术:通过timerfdepoll实例向负责处理的内核工作线程(kernel worker)发送大量通知,使其负载过载、运行速度减慢,从而显著扩大竞态条件的时间窗口。 研究人员利用上述msg_msg对象破坏技术,实现了越界读取(out-of-bounds read),泄露包含进程凭证(struct cred)地址在内的内核内存数据。 借助这些信息,研究人员对pipe_buffer对象发起第二次 “释放后使用” 攻击,获得了任意地址的读写权限。 最终,攻击者可直接修改进程凭证,将权限提升至 root 级别,完成 “仅数据攻击”(data-only attack,指不修改内核代码仅通过篡改数据实现攻击的方式)。 整个漏洞利用开发过程通过kernel-hack-drill(一种定制化测试环境)进行优化 —— 该环境可在受控条件下测试内核漏洞利用原语。
评论:0   参与:  4