最近网上爆出消息称,Linux 中发现了一个新的漏洞,该漏洞被归类为“高危”,影响 5.8 及更高版本的所有内核,以及包括 Android 在内的衍生版本。
它被称为“脏管道”,允许覆盖只读文件中的数据,并且可以通过向“root”进程注入代码来提升权限。
尽管它已被修补到主线 Linux 内核中,但该漏洞可能会以特权升级利用的形式在所有运行 Linux 内核版本 5.8 或更高版本的设备上被武器化。
这也意味着一系列新发布的 Android 智能手机,如三星 Galaxy S22 和谷歌 Pixel 6,也很容易受到攻击,直到每台设备从各自的 OEM 收到适当的内核补丁。
关于脏管
该漏洞由安全研究员 Max Kellerman 发现,并被编入 (CVE-2022-0847);花了几个月的时间才找到概念验证漏洞利用程序。
该漏洞允许非特权用户向只读文件中注入并覆盖数据,包括以 root 权限运行的 SUID 进程。其俗称似乎是对臭名昭著的“脏牛”(Dirty Cow)漏洞和 Linux 进程间消息传递机制“管道”(pipelining)的谐音,因为后者在漏洞利用过程中被使用。
这一切都始于一年前与损坏文件相关的支持票。 有客户抱怨下载的访问日志无法解包。 事实上,其中一台日志服务器上有一个损坏的日志文件; 它可能是未压缩的,但 gzip 报告了 CRC 错误。 我无法解释它为什么会损坏,但我认为夜间拆分过程已经崩溃并产生了一个损坏的文件。 我手动更正了文件的 CRC,关闭了工单,很快就忘记了问题。
经过数月的分析,研究人员最终发现客户端文件损坏是由于 Linux 内核中的一个漏洞造成的。他找到了一种利用 Dirty Pipe 漏洞的方法,允许任何拥有账户的用户,包括权限较低的“nobody”账户,向 root 用户账户添加 SSH 密钥。
为了触发该漏洞,Kellerman 分享了他的概念证明,攻击者必须具有读取权限。 此外,滚动不能在页面边界上,写入不能跨越页面边界,并且文件不能调整大小。
要利用此漏洞,您必须:创建管道,用任意数据填充管道(通过在环中的所有条目上设置 PIPE_BUF_FLAG_CAN_MERGE 标志),清空管道(在结构中的 pipe_buffer 结构的所有实例上设置标志pipe_inode_info 环),将目标文件(使用 O_RDONLY 打开)中的数据合并到目标偏移之前的管道中,并将任意数据写入管道。
Dirty Pipe 还会影响任何基于 Linux 内核易受攻击版本之一的 Android 版本。 由于 Android 如此碎片化,无法统一跟踪受影响的设备型号。
据 Kellermann 称,谷歌上个月将该漏洞修复程序合并到 Android 内核中,此前不久,Linux 内核版本 5.16.11、5.15.25 和 5.10.102 也修复了该漏洞。
话虽如此,在 OEM 开始推出包含该修复程序的 Android 更新之前,我们可能需要稍等片刻。 例如,谷歌的 Pixel 6 仍然容易受到攻击,但高级用户可以通过安装定制补丁的售后内核作为替代选项来缓解该漏洞。
Linux 内核开发者于 2 月 23 日发布了修复程序(5.16.11、5.15.25、5.10.102),而谷歌于 2 月 24 日修复了 Android 内核。Kellermann 和其他专家将此漏洞与CVE-2016-5195“Dirty Cow”进行了比较,并表示它更容易被利用。