研究人员发现一种新型利用技术,可成功绕过现代安全防护措施,通过Linux内核中复杂的释放后重用(Use-After-Free,UAF)漏洞获取root权限。
漏洞背景分析
该技术针对编号为CVE-2024-50264的漏洞,这是AF_VSOCK子系统中一个难以利用的竞态条件漏洞,曾因其复杂性获得Pwnie Awards奖项认可。该漏洞自Linux v4.8版本引入,存在多重利用难点。
据安全研究员Alexander Popov分析,非特权用户虽可触发该漏洞,但面临严重限制:竞态条件不稳定、内存破坏时间窗口极短、且内核在利用过程中存在多种崩溃可能。
原始利用方案极为复杂,需要大规模内存喷射及SLUBStick、Dirty Pagetable等高级技术。
新型利用技术原理
研究人员转而寻求更简洁的利用路径,开发出基于msg_msg
内核对象的新方法。该技术的核心在于能够破坏msg_msg
对象而不导致内核挂起。
通常情况下,对此类对象的UAF写入会因m_list.prev
指针字段非零而失败,导致内核尝试获取自旋锁时系统挂起。
研究人员通过巧妙操纵消息队列实现突破:
- 将消息队列填充至接近饱和状态,仅保留少量空闲空间
- 尝试发送目标
msg_msg
对象,由于队列已满,内核会分配对象但阻塞msgsnd()
系统调用 - 在系统调用阻塞期间触发UAF,破坏等待中的
msg_msg
对象字段 - 释放消息队列空间后,被阻塞的系统调用恢复执行,内核将受损的
msg_msg
对象加入队列,在此过程中自动修复损坏的列表指针从而避免崩溃
该技术无需事先获取内核信息泄露,即可在恶劣条件下通过UAF写入创建可靠的利用原语。
内核防护绕过方案
为成功实施攻击,研究人员还需克服其他障碍:
通过跨缓存攻击(cross-cache attack),用msg_msg
对象替换已释放的virtio_vsock_sock
对象,规避CONFIG_RANDOM_KMALLOC_CACHES
等内核加固特性。同时UAF写入速度过快也会影响攻击可靠性。
Alexander表示,通过大量timerfd
和epoll
实例通知使目标内核工作线程过载,可显著延长竞态条件时间窗口。
利用msg_msg
对象破坏实现越界读取,泄露包含进程凭证(struct cred
)地址的内核内存信息后,再对pipe_buffer
对象实施第二次UAF攻击,最终获得任意地址读写能力,直接修改进程凭证提升至root权限,完成纯数据攻击(data-only attack)。
整个漏洞利用开发过程使用定制测试环境kernel-hack-drill
进行优化,该工具可在受控条件下实验内核利用原语。
参考来源:
New Technique Uncovered To Exploit Linux Kernel Use-After-Free Vulnerability
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)