
本周,Linux开源操作系统曝出两个高危安全漏洞,其中一个允许不受信任的虚拟机获取宿主机的root权限。
该漏洞同时影响运行于AMD和Intel处理器上的KVM,利用的是KVM客户端侧的缺陷。客户端侧仅包含客户虚拟机中的操作系统或驱动程序等资源,而非宿主机上的资源。这一威胁在Linux内核中潜伏长达16年未被发现。
发现该漏洞的研究员Hyunwoo Kim写道:"仅凭客户端侧的操作,攻击者就能攻陷运行其虚拟机的宿主机。例如,在公有云上仅租用一个实例的攻击者,可以使宿主内核崩溃,导致同一物理机上的所有其他租户虚拟机停机(拒绝服务攻击),或者以root权限在宿主机上执行代码,从而接管宿主机及其上的所有客户虚拟机(远程代码执行)。"
Kim将该漏洞命名为Januscape。这是一个释放后使用漏洞——一种将恶意代码注入已释放内存区域的内存损坏漏洞,位于影子MMU仿真层中,该层负责宿主内存地址与虚拟机监控程序内存地址之间的相互转换。
利用该漏洞的攻击仅需在客户端侧执行操作,即可破坏宿主内核的影子页——宿主机中协助地址转换的数据结构。Kim已发布了一个概念验证漏洞利用程序,可在客户虚拟机中运行,触发宿主操作系统崩溃。他表示,能完全实现客户机逃逸的利用程序已经存在,但要到"遥远的将来"才会公开。
该漏洞不存在于QEMU中——QEMU是一个与内存转换相关的独立进程。这一区别意味着,即使在部署了自有虚拟化堆栈的云环境中,该漏洞依然可被利用。漏洞利用的前提是客户虚拟机用户须拥有root权限。
谷歌为此次漏洞报告颁发了25万美元的奖励。
该漏洞存在于内核的futex优先级继承机制中——这一系统用于防止紧急任务被低优先级任务阻塞。该系统中有一个清理步骤,负责在任务停止等待后进行善后处理。在一种罕见的执行路径下,当锁操作遭遇死锁需要回退时,清理步骤会在错误时机运行,并清除了错误任务的记录。内核因此持有一个指向已释放并被重新使用的内存的指针。信任这个过期指针,正是该漏洞的根本所在——这是一个典型的释放后使用问题。
此后,Nebula将多个步骤串联起来,将悬空指针逐步升级为完全控制权,最终诱使内核以root身份执行其代码。所利用的futex优先级继承代码可追溯至2011年,是一段历史悠久、被广泛使用却鲜有人重新审阅的代码。
Nebula将该漏洞命名为GhostLock,其严重性评分为7.8分(满分10分)。谷歌为此授予研究人员92,337美元的奖励。与Januscape漏洞获得的25万美元奖励一样,这笔奖金同样通过谷歌的kernelCTF漏洞奖励计划发放。
目前,两个漏洞均已在Linux内核中得到修复。Linux用户应检查自己使用的发行版,确认修复补丁已应用至对应版本。
Q&A
Q2:GhostLock漏洞是如何被发现的?
Q3:Linux用户应该如何应对这两个漏洞?
A:目前这两个漏洞均已在Linux内核层面获得补丁修复。Linux用户应及时检查自己所使用的Linux发行版,确认安全补丁已经推送并应用到对应版本。建议尽快更新系统,特别是在云服务器或多租户环境中运行Linux的用户,应优先完成修复,以避免遭受潜在的虚拟机逃逸或本地提权攻击。