研究人员发现一种新型技术,可利用 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)时会导致系统挂起。
研究人员通过对消息队列的巧妙操控,提出了如下解决方案: 通过这种技术,即便在复杂条件下,也能从 “释放后使用” 写入操作中构建出可靠的漏洞利用原语(exploit primitive),且无需提前泄露内核信息。
绕过内核防御机制
要成功执行攻击,还需克服其他多项障碍。 研究人员通过跨缓存攻击(cross-cache attack),将已释放的virtio_vsock_sock对象替换为msg_msg对象,从而绕过CONFIG_RANDOM_KMALLOC_CACHES等内核硬化(kernel hardening)特性。此外,“释放后使用” 写入操作的执行速度过快,曾导致该攻击难以稳定生效。
亚历山大表示,为解决这一问题,研究人员采用了一种技术:通过timerfd和epoll实例向负责处理的内核工作线程(kernel worker)发送大量通知,使其负载过载、运行速度减慢,从而显著扩大竞态条件的时间窗口。
研究人员利用上述msg_msg对象破坏技术,实现了越界读取(out-of-bounds read),泄露包含进程凭证(struct cred)地址在内的内核内存数据。
借助这些信息,研究人员对pipe_buffer对象发起第二次 “释放后使用” 攻击,获得了任意地址的读写权限。
最终,攻击者可直接修改进程凭证,将权限提升至 root 级别,完成 “仅数据攻击”(data-only attack,指不修改内核代码仅通过篡改数据实现攻击的方式)。
整个漏洞利用开发过程通过kernel-hack-drill(一种定制化测试环境)进行优化 —— 该环境可在受控条件下测试内核漏洞利用原语。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


评论