Linux|发现\肮脏的管道\——Linux漏洞

Linux|发现\肮脏的管道\——Linux漏洞

文章图片

Linux|发现\肮脏的管道\——Linux漏洞

Max Kellermann解释说 , 该漏洞会影响Linux Kernel 5.8及更高版本 。周一 , 一位网络安全研究人员发布了一个Linux漏洞的细节 , 该漏洞允许攻击者覆盖任意只读文件中的数据 。

该漏洞 ( CVE-2022-0847 ) 是由 Max Kellermann 于 2021 年 4 月发现的 , 但他又花了几个月的时间才弄清楚到底发生了什么 。Kellermann解释说 , 该漏洞会影响Linux Kernel 5.8及更高版本 , 但在Linux 5.16.11 , 5.15.25和5.10.102终于得到了修复 。
\"这一切都始于一年前关于损坏文件的支持票证 。 一位客户抱怨他们下载的访问日志无法解压缩 。 实际上 , 其中一个日志服务器上有一个损坏的日志文件;它可以解压缩 , 但gzip报告了CRC错误 。 我无法解释为什么它已损坏 , 但我认为夜间拆分过程已崩溃并留下了损坏的文件 。 我手动修复了文件的CRC , 关闭了工单 , 很快就忘记了这个问题 , \"Kellermann说 。
\"几个月后 , 这种情况一次又一次地发生 。 每次 , 文件的内容看起来都是正确的 , 只有文件末尾的CRC是错误的 。 现在 , 通过几个损坏的文件 , 我能够更深入地挖掘并发现一种令人惊讶的腐败 。 一种模式出现了 。
凯勒曼继续展示了他如何发现这个问题 , 以及有人如何潜在地利用它 。 他最初认为该错误仅在特权进程写入文件时才可利用 , 并且它取决于时间 。但他后来发现 , 即使在没有编写器的情况下 , 也可以覆盖页面缓存 , 没有时间限制 , \"在(几乎)任意位置与任意数据\" 。

为了利用此漏洞 , 攻击者需要具有读取权限 , 偏移量不得位于页面边界上 , 写入不能跨越页面边界 , 并且无法调整文件大小 。
\"要利用此漏洞 , 您需要:创建一个管道 , 用任意数据填充管道(在所有环形条目中设置PIPE_BUF_FLAG_CAN_MERGE标志) , 排出管道(在结构pipe_inode_info环上的所有结构pipe_buffer实例中设置该标志) , 将目标文件(用O_RDONLY打开)中的数据从目标偏移之前拼接到管道中[并
将任意数据写入管道 , \"他解释道 。
\"此数据将覆盖缓存的文件页面 , 而不是创建新的匿名结构pipe_buffer因为设置了PIPE_BUF_FLAG_CAN_MERGE 。 为了使此漏洞更有趣 , 它不仅可以在没有写入权限的情况下工作 , 还可以在不可变文件、只读 btrfs 快照和只读挂载(包括 CD-ROM 挂载)上工作 。 这是因为页面缓存始终是可写的(通过内核) , 并且写入管道从不检查任何权限 。
他还分享了自己的概念验证漏洞 。
错误报告、漏洞利用和补丁由 Kellermann 于 2 月 20 日发送给 Linux 内核安全团队 。 该错误在Google Pixel 6上重现 , 并向Android安全团队发送了错误报告 。
Linux于2月23日发布了修复程序(5.16.11 , 5.15.25 , 5.10.102) , Google于2月24日将Kellermann的错误修复合并到Android内核中 。
Kellermann和其他专家将该漏洞与CVE-2016-5195\"Dirty Cow\"进行了比较 , 但表示它更容易利用 。


肮脏的管道PoC(https://t.co/ql5Y8pWDBj)工作得很好 。 \uD83E\uDD11 pic.twitter.com/OrRYJE5skC
— BLASTY (@bl4sty) 三月 7 ,2022
Vulcan Cyber的Mike Parkin表示 , 任何允许根级别访问Linux系统的漏洞都是有问题的 。
\"获得root的攻击者可以获得对目标系统的完全控制 , 并可能能够利用该控制来访问其他系统 。 这个漏洞的缓解因素是它需要本地访问 , 这略微降低了风险 , \"帕金说 。