Android、Debian和Ubuntu用户仍然处于危险之中。
Linux内核中出现了严重缓存失效的bug,这可能允许攻击者在目标系统上获得root权限。
这是上周发布的第二个Linux内核缺陷;最近还发现了一个本地特权升级问题。
这个缺陷(CVE-2018-17182)存在于内核版本3.16到4.18.8的Linux内存管理中,可以通过许多不同的方式加以利用,“甚至可以从相对强的沙箱环境中”,Google Project Zero的研究员Jann Horn说。
在Horn于9月18日负责任地报告了上游内核树的问题后,Linux团队在两天内就修复了这个问题。Horn表示,与其他软件供应商的修复时间相比,这个问题“异常快”。
坏消息是Debian稳定版和Ubuntu 16.04和18.04还没有修补漏洞——Android用户仍然处于危险之中。
“Android每个月只发布一次安全更新,”Horn本周在一篇关于这个漏洞的博客文章中说。“因此,当一个安全关键的修复程序在一个上游稳定的内核中可用时,它仍然需要花费数周的时间才能真正对用户可用——尤其是在安全影响没有公开宣布的情况下。”
缺陷
Horn解释说,这个漏洞源于溢出问题。
当Linux内核查找虚拟内存区域(VMA)以处理页面错误时,有一条慢速路径涉及爬行代码中的所有VMA,以便找到问题的正确解决方案。因为这是效率低下并且性能受到影响,所以编码器内置快速跟踪替代方案,可以在最近使用VMA时使用。
然而,这种缓存方法带来了自己的问题。
“当释放VMA时,所有线程的VMA缓存必须无效 - 否则,下一个VMA查找将遵循悬空指针。但是,由于进程可以包含许多线程,因此只需遍历所有线程的VMA缓存就会出现性能问题,“Horn解释道。
对此的修复涉及使用序列号标记线程以区分各种快速路径路径。但序列号只有32位宽,这意味着它们可能会溢出。作为版本3.16中的优化,溢出处理逻辑被添加到混合中,这引入了导致免费使用后(UAF)漏洞的缺陷,a.k.a。CVE-2018-17182。
UAF特别指的是在释放后访问内存的尝试;不正确的UAF编码(例如,允许程序在释放后继续使用指针)可能导致程序崩溃。同时,UAF漏洞是一类内存损坏错误,源于对程序的哪个部分负责释放内存的混淆。在此漏洞的情况下,这为允许root访问和执行任意代码的漏洞打开了大门。
用户可以通过更新到上游稳定版本(4.18.9,4.14.71,4.9.128,4.4.157或3.16.58)使CVE-2018-17182成为非问题。
“通过将[VMA]序列号更改为64位来修复错误,从而使溢出不可行并删除溢出处理逻辑,”Horn说。
利用
Horn指出,对于未打补丁的系统,有多种方法可以利用漏洞攻击目标。但是,根据Horn的说法,内核的配置会产生很大的影响 - 在这种情况下,成功利用在使用尚未配置以提高安全性的Linux内核的环境中变得更加微不足道。
例如,试图利用内核错误的攻击者可能会受益于多次重试攻击而不会触发系统重新启动的能力。
“能够读取第一次尝试产生的崩溃日志的攻击者甚至可以使用该信息进行更复杂的第二次尝试,”研究人员说。
Horn构建了一个概念验证(PoC),用于专门攻击Ubuntu 18.04(内核linux-image-4.15.0-34-generic,版本4.15.0-34.37),证明了这一点 - 它允许有足够长时间访问权限的人 - 大约一个小时 - 获得目标系统的root权限。
他解释说:“从根本上说,这个错误可以由任何进程触发,这个进程可以运行足够长的时间,以溢出引用计数器(如果MAP_FIXED可用,大约一个小时),并且能够使用mmap()/munmap()(管理内存映射)和clone()(创建线程)。”
这似乎是增加安全性的明智之举,但研究人员指出,它归结为在可用性,可靠性和安全性之间进行权衡。
“系统所有者可能希望系统尽可能长时间地运行,即使系统部分崩溃,如果突然的内核恐慌会导致数据丢失或重要服务的停机,”他解释说。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx