CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

admin 2022年3月9日16:06:27评论204 views字数 2473阅读8分14秒阅读模式


CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

点击上方蓝字关注

CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

The Dirty Pipe

Linux kernel privilege escalation

摘要

Linux Kernel 5.8及以后版本中允许覆盖重写任意可读文件中的数据,未经授权的本地用户可以使用此漏洞写入由只读文件支持的页面缓存中的页面,可以利用此漏洞进行本地权限提升。类似于CVE-2016-5195 “Dirty Cow”。此漏洞影响 5.17-rc6 之前的 Linux 内核版本。

评分

CVSSV3 :7.8

POC已公开

CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC


影响范围

影响版本

5.8 <= Linux kernel < 5.16.11 / 5.15.25 / 5.10.102


安全版本

该漏洞已在Linux 5.16.11、5.15.25 和 5.10.102 中修复。

漏洞验证

目前存在两个可用poc,一个是原作者Max Kellermann的poc,原poc是通过覆写文件来达到提权的目的,另一个是它的改进版,通过覆盖SUID程序来达到提权的目的。

(1)通过覆盖SUID程序进行提权poc验证

SUID (Set User ID) 是文件的一种权限,允许用户以其所有者的权限执行文件。Linux 二进制文件可以拥有这种类型的权限集有很多原因。例如,ping 实用程序需要 root 权限才能打开网络套接字,但它也需要由标准用户执行,以验证与其他主机的连接。

但是,如果某些现有的二进制文件和实用程序具有 SUID 权限,则可以使用它们将权限提升到 root。

以下命令可以发现系统上运行的所有 SUID 可执行文件。更具体地说,这些命令是尝试在用户 root 拥有的具有 SUID 权限位的目录中查找文件,然后将所有其重定向到 /dev/null 以便仅列出用户有权访问的二进制文件使用权。

find / -user root -perm -4000 -print 2>/dev/nullfind / -perm -u=s -type f 2>/dev/nullfind / -user root -perm -4000 -exec ls -ldb {} ;

复现过程

①查询suid可执行文件

CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

②提权

CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

(2)通过覆写/etc/passwd文件进行提权poc验证

①用法

CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

②备份/etc/passwd

sudo cp /etc/passwd /etc/passwd.bak

③查看/etc/passwd

cat /etc/passwd

这里了解一下/etc/passwd中各用户数据每个字段的含义(因为我也不是很清楚)。

第一个字段中保存的是:注册名,也就是用户名称,这里为root。

第二字段为:口令(passwd),也就是密码,这里的x代表的是密码标志,而不是真正的密码,真正的密码是保存在 /etc/shadow 文件中。

注:在早期的 UNIX 中,这里保存的就是真正的加密密码串。现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc /shadow作为真正的口令文件,用于保存包括个人口令在内的数据。

第三个字段就是用户 ID(UID),这里为0,代表超级用户。

注:0=超级用户、1~499=系统用户(伪用户)、500-65535=普通用户。

第四个字段就是用户的组 ID、这里为0,代表所属组为0组。

第五个字段是这个用户的简单说明,这里为root,没有什么特殊作用,可以不写。

注:如用户的真实姓名、办公室地址、联系电话等。

第六个字段是这个用户的家目录,这里为/root。

注:超级用户的家目录是 /root 目录,普通用户在 /home/ 目录下建立和用户名相同的目录作为家目录,如 lamp 用户的家目录就是 /home/lamp/ 目录。

第七个字段为:用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名,可以理解为用户登录之后所拥有的权限,这里为/bin/bash,代表可以使用bash程序。

例:若为/sbin/nologin代表禁止登录,一般为系统用户。若为/usr/bin/passwd,这是修改用户密码程序的路径,代表用户只能改自己的密码。

更详细的解释参考:

http://c.biancheng.net/view/839.html


④执行命令进行提权

参考p师傅的方法,执行命令

./exploit /etc/passwd 5 ":0:0:rootx:"

将root用户的密码置空,再次切换root用户可以免密切换。

CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

这里碰到一个问题,当我执行命令

./exploit /etc/passwd 5 ":0:0:root:"

切换root用户失败。

CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

再次尝试:

./exploit /etc/passwd 5 ":0:0:r1234:"

成功。盲猜应该是在用户密码为空的情况下注册名和描述性信息不能相同,具体原因不知道,有了解的师傅可以帮忙给解释一下。

CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

相关POC后台回复CVE-2022-0847获取,包含源码和可执行文件。


Max Kellermann's blog:https://dirtypipe.cm4all.com/

修复建议

升级linux内核到安全版本:

Linux 内核 >= 5.16.11

Linux 内核 >= 5.15.25

Linux 内核 >= 5.10.102


参考链接:

https://dirtypipe.cm4all.com/

https://haxx.in/files/dirtypipez.c

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0847

https://blog.csdn.net/qq_44657899/article/details/106934143

https://www.cnblogs.com/sainet/p/15785864.html


声明:本文作为个人学习记录使用,请勿用于非法行为。


我知道你  在看  哦


原文始发于微信公众号(401SecNote):CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POC

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月9日16:06:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2022-0847 Dirty Pipe linux内核提权漏洞 | POChttps://cn-sec.com/archives/822812.html

发表评论

匿名网友 填写信息