1
漏洞简介
它类似于CVE-2016-5195 “Dirty Cow”,但更容易被利用。
该漏洞已 在 Linux 5.16.11、5.15.25 和 5.10.102 中修复。
2
影响版本
Linux kali 5.10.0-kali7-amd64 #1 SMP Debian 5.10.28-1kali1 (2021-04-12) x86_64 GNU/Linux
3
原理
在我的第一个漏洞利用(我用于 bisect 的“writer”/“splicer”程序)中,我假设这个 bug 只能在特权进程写入文件时被利用,并且它取决于时间。
当我意识到真正的问题是什么时,我能够大大扩大漏洞:即使在没有写入器的情况下,也可以在没有时间限制的情况下,在(几乎)任意位置使用任意数据覆盖页面缓存. 限制是:
-
攻击者必须具有读取权限(因为它需要将 splice()页面放入管道)
-
偏移量不能在页面边界上(因为该页面的至少一个字节必须已拼接到管道中)
-
写入不能跨越页面边界(因为将为其余部分创建一个新的匿名缓冲区)
-
文件无法调整大小(因为管道有自己的页面填充管理,并且不会告诉页面缓存附加了多少数据)
要利用此漏洞,您需要:
-
创建管道。
-
用任意数据填充管道( PIPE_BUF_FLAG_CAN_MERGE在所有环条目中设置标志)。
-
排干管道(在环上的所有实例中设置标志)。struct pipe_bufferstruct pipe_inode_info
-
将目标文件(以 开头O_RDONLY)中的数据从目标偏移之前的位置拼接到管道中。
-
将任意数据写入管道;此数据将覆盖缓存的文件页面,而不是创建新的异常,因为已设置。struct pipe_bufferPIPE_BUF_FLAG_CAN_MERGE
为了让这个漏洞更有趣,它不仅可以在没有写权限的情况下工作,它还可以用于不可变文件、只读 btrfs 快照和只读挂载(包括 CD-ROM 挂载)。这是因为页面缓存始终是可写的(由内核),并且写入管道从不检查任何权限。
4
复现
4
时间线
-
2021-04-29:关于文件损坏的第一个支持票
-
2022-02-19:文件损坏问题被确定为 Linux 内核错误,结果证明这是一个可利用的漏洞
-
2022-02-20:向Linux 内核安全团队发送错误报告、漏洞利用和补丁
-
2022-02-21:在 Google Pixel 6 上重现错误;发送给 Android 安全团队的错误报告
-
2022-02-21: 按照 Linus Torvalds、Willy Tarreau 和 Al Viro 的建议,将补丁发送到 LKML(不含漏洞详细信息)
-
2022-02-23:带有我的错误修复的Linux稳定版本 (5.16.11、5.15.25、5.10.102)
-
2022-02-24:Google 将我的错误修复合并到 Android 内核中
-
2022-02-28:通知linux-distros 邮件列表
-
2022-03-07:公开披露
5
exp下载
公众号后台回复20220308获取下载链接
6
参考链接
https://github.com/Arinerron/CVE-2022-0847-DirtyPipe-Exploit
https://github.com/imfiver/CVE-2022-0847
https://dirtypipe.cm4all.com/
原文始发于微信公众号(银河护卫队super):漏洞预警 | CVE-2022-0847linux内核提权漏洞复现/原理讲解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论