理解Docker cp漏洞CVE-2019-14271

理解Docker cp漏洞CVE-2019-14271

本文基于下面链接文章对CVE-2019-14271进行理解

迄今为止最严重的容器逃逸漏洞:Docker cp命令漏洞分析
这篇文章读了很久,反复琢磨才逐步搞懂它的原理,来之不易!!!
首先我们来了解以下docker cp的原理

一、docker cp

命令

docker cp test:/var/log /tmp

上面的命令表示将容器test的/var/log目录里的文件复制到宿主机的/tmp文件夹下面
在这个过程中借助了一个名叫docker-tar的帮助进程,文章中是这样验证的
首先在后台执行

docker cp test:/var/log /tmp &

然后执行

ps afx | grep -v grep | grep -B 1 docker-tar

来查看进程信息
我试了下,可能是我的log文件夹太小了,我啥也没查出来。
在这里插入图片描述
这是文章中查到的,注意这里的进程号20618,待会要用到!
docker-tar的原理其实是使用了chroot,其实就是设置了一个根目录,将要请求的文件与目录放到这个根目录中去,生成一个tar文件,然后再将这个tar文件交给docker的守护进程,由守护进程将文件复制到目标文件夹中去。
什么是chroot?自行百度,我也是现场查的!!
为什么要用chroot呢?文章中解释是因为为了避免符号链接导致问题,因为复制过程中,如果目录中有符号链接的话,该符号链接可能被解析为宿主机的根目录,那么攻击者就可以利用这一点越过容器对宿主机文件系统进行操作。当使用chroot之后,所有的请求文件都被放在这个自定义的根目录下,自然就避免了这个问题。
上面就是关于该漏洞的一些预备知识

二、漏洞原理

docker是使用golang语言编写的,易受攻击的是使用go v1.11版本编写的
在这个版本中,某些嵌入式的C语言软件包会动态加载动态链接库文件,这些软件包包括net os/user,这些软件包在运行的时候会加载多个libnss_*.so库文件。而docker-tar在运行的时候会调用这个软件包,也就会执行动态链接库文件,通常该动态链接库文件时从宿主机的文件系统中加载的,但因为使用了chroot将根目录定义到容器中了,那么在加载库文件的时候就是从容器的文件系统中加载的,那么也就是说,容器中的命令可以影响到宿主机!!如果某个动态链接库文件中包含恶意代码,那么宿主机就会被攻击,可以看出,前提是我们拥有对容器的控制权,那么我们怎么获得这个控制权呢?

  • 自己
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值