CVE-2021-32760漏洞分析与复现

CVE-2021-32760漏洞分析与复现

wx_游由 看雪学苑 2024-03-10 17:59

本文仅用于学习研究为目的,禁止用于任何非法目的,否则后果自负。

近日Containerd公布了一个安全漏洞,攻击者通过构造一个恶意镜像,能够在普通用户进行pull和提取镜像时,修改用户宿主机上现存文件的文件权限。该漏洞不能直接读取,写入或者执行用户的文件。

CVE-2021-32760漏洞被评估为
5.0 MEDIUM(https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?name=CVE-2021-32760&vector=AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:L&version=3.1&source=GitHub,%20Inc.)
中危,关于该漏洞的详细信息,请参见
https://github.com/containerd/containerd/security/advisories/GHSA-c72p-9xmj-rx3w

漏洞分析

从官方的
patch(https://github.com/containerd/containerd/compare/v1.5.3…v1.5.4)
可以看出,之前只考虑了硬链接和非软连接的情况,当在打包的时候采用软链接+硬链接时则会绕过该检查。

修复之前的代码:

修复之后的代码:

通过构造软连接+硬链接的方式将容器镜像内部的文件链接到宿主机上的文件构造恶意镜像,能够在Containerd拉取和提取镜像的时候修改宿主机文件权限,官方给的测试用例如下:

漏洞复现

在镜像中创建admin目录,此目录需要宿主机也存在,并构造恶意链接:

在宿主机创建poc和ep两个文件,poc赋予400权限:

打包镜像后,用containerd进行拉取:

查看poc文件权限:

可以看到文件权限变为777,利用成功。

在这个漏洞分析完之后,不免产生一个疑问,docker和containerd都存在拉取并提取镜像的行为,为什么这个漏洞只影响containerd,不影响docker呢?

让我们分别看下docker和containerd对镜像进行提取时的逻辑:

containerd:

首先containerd在处理tar包时,会对tar包中的文件进行遍历,刚开始发现此处其实存在目录穿越的问题,后来仔细研究发现在使用相对路径时候,fs.RootPath
在所有的路径前面都加上了root目录,限制了目录的范围,无法进行穿越,之后createTarFile
函数对压缩包的不同文件类型都进行了处理,当文件类型是软链接时:

直接对软连接和path进行了链接,并未对链接后的路径进行限制,因此此处其实是存在目录穿越漏洞的,在有漏洞的handleLChmod
代码中,对tar文件的文件类型进行了判断,并未对链接的文件类型进行限制,因此当采用软连接+硬链接时,会直接链接到宿主机的文件中,从而将宿主机的文件权限进行修改。

值得注意的是,此处containerd对使用软链接的目录穿越的问题仍未修复,修复后的代码只是对文件的类型进行了判断,因此还是可以通过软连接+硬链接的方式链接到宿主机的文件,只不过干不了什么?

再来看看docker这部分逻辑的实现代码:

可以看到此处docker对于路径的限制其实是比containerd更严格的,除了对在tar包的文件路径前面加上了dest
的限制,并且禁止使用..
的相对路径,因此在docker中这部分逻辑不存在目录穿越的问题。再看下对于链接文件的处理情况:

可以看到其实docker是有相似的处理逻辑,只不过docker的处理逻辑更加严格,对链接文件进行了限制,无法链接到宿主机的任意文件中了,因此这个漏洞不影响docker。

虽然对于文件权限的处理逻辑docker和containerd一模一样。

社区版受影响范围

<=1.4.7,1.5.0,1.5.1,1.5.2,1.5.3

修复版本

1.5.4, 1.4.8


缓解措施:

1、保证镜像从可信的镜像源头进行下载;

2、使用
SELinux(https://wiki.centos.org/HowTos/SELinux)

AppArmor(https://apparmor.net/)
限制Containerd访问的文件。


修复措施:

升级Contained到
1.5.4, 1.4.8。

看雪ID:wx_游由

https://bbs.kanxue.com/user-home-765771.htm

*本文为看雪论坛优秀文章,由 wx_游由 原创,转载请注明来自看雪社区

#往期推荐

1、安卓真机无root环境下的单机游戏修改-IL2CPP

2、autojs简介与对抗

3、记一次汽车app白盒aes还原过程

4、使用Unidbg在CTF-Android题目的快速解题

5、安卓逆向 MagicImageViewer技巧分享

6、国赛babytree 赛题解析

CVE-2021-32760漏洞分析与复现 -3

球分享

CVE-2021-32760漏洞分析与复现 -3

球点赞

CVE-2021-32760漏洞分析与复现 -3

球在看

CVE-2021-32760漏洞分析与复现 -4

点击阅读原文查看更多