3月29日,研究人员在Linux操作系统中发现了2个新的安全漏洞,攻击者成功利用后可以绕过Spectre 这类推测攻击的漏洞补丁,并从kernel内存中获取敏感信息。
漏洞概述
这两个漏洞是由Symantec研究人员Piotr Krysiuk发现的,CVE编号为CVE-2020-27170 和 CVE-2020-27171,影响5.11.8 之前版本的Linux kernel。安全补丁已于3月20日发布,Ubuntu、Debian、Red Hat等系统也都应用了补丁。
这两个漏洞都与Linux kernel对扩展 Berkeley Packet Filters(BPF,伯克利包过滤)有关。BPF允许用户直接在Linux kernel中执行用户提供的程序。在加载这些程序时,Linux kernel会分析程序代码以确保安全。但是为了修复Spectre漏洞的分析不足以保护对Spectre漏洞的利用。
CVE-2020-27170是最严重的漏洞,可以用来从kernel 内存中的任意位置获取内容,也就是说可以在机器的任意RAM 中窃取内容。运行在受影响的系统上的非特权的BPF 程序可以绕过Spectre 补丁并执行没有任何限制的界外BPF 程序。攻击者可以通过侧信道来获取内存中的内容。非特权的BPF 程序允许在特定指针类型上执行指针运算,其中ptr_limit 是没有定义的。在这种类型的指针上执行指针算数运算时,Linux kernel中是不包含任意对界外推测的保护的。
CVE-2020-27171 漏洞可以从4GB的内存空间获取内容。该漏洞是在保护针对界外推测的指针算术运算时由于运算器错误引发的安全漏洞。运行在受影响的系统上的非特权的BPF 程序可以利用该错误来从4GB的kernel内存执行推测界外加载。与CVE-2020-27170 漏洞类似,攻击者也可以通过侧信道来恢复kernel 内存中的内容。
漏洞利用
漏洞利用最可能的场景是多个用户可以访问单个受影响的计算机,此时,非特权用户可以滥用上述任一漏洞来从kernel 内存中提取内容来定位其他用户的秘密信息。
如果攻击者可以访问有漏洞的机器,那么攻击者还可以下载恶意软件到受影响的计算机上以实现远程访问,然后利用这些漏洞获取机器上其他用户的信息。
Piotr 使用了2种不同的方法来证明这些保护可以被绕过。这两种方法是相互独立的,并且都可以让非特权的本地用户从kernel内存中提取内容,包括口令、剪贴板内容等。
谷歌研究人员也发布了用JS编写的PoC来证明在运行Chrome 88 浏览器的Intel Skylake CPU上可以以1kb/s的速度泄露数据。
- 谷歌PoC代码参见:https://security.googleblog.com/2021/03/a-spectre-proof-of-concept-for-spectre.html
- 更多技术细节参见:https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/spectre-bypass-linux-vulnerabilities
本文翻译自:https://thehackernews.com/2021/03/new-bugs-could-let-hackers-bypass.html