# K8S Container Escape

Kubernetes 容器逃逸与集群攻击。当目标运行在 K8s 环境中、发现 6443/10250/2379 端口、获取到 ServiceAccount...

- Repository: https://github.com/wgpsec/AboutSecurity (1833 stars)
- Category: DevOps
- License: see repository
- Last updated: 2026-10-24
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add wgpsec/AboutSecurity --skill k8s-container-escape -g -a claude-code -y`
Codex: `npx skills add wgpsec/AboutSecurity --skill k8s-container-escape -g -a codex -y`
Cursor: `npx skills add wgpsec/AboutSecurity --skill k8s-container-escape -g -a cursor -y`
Gemini CLI: `npx skills add wgpsec/AboutSecurity --skill k8s-container-escape -g -a gemini-cli -y`

## Description

Kubernetes 容器逃逸与集群攻击。当目标运行在 K8s 环境中、发现 6443/10250/2379 端口、获取到 ServiceAccount Token、或已在容器内时使用。覆盖容器逃逸、Pod 提权、API Server 未授权、etcd 泄露、RBAC 滥用、节点接管。任何涉及 Kubernetes、容器编排、云原生安全的场景都应使用此技能

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Kubernetes 容器逃逸与集群攻击

K8s 集群一旦被突破，攻击面极大, , 从单个 Pod 可以横向扩展到整个集群的所有节点和服务。

## ⛔ 深入参考（必读）

- 容器逃逸详细手法（挂载逃逸/内核漏洞/特权容器/cgroup）→ 读 [references/escape-techniques.md](references/escape-techniques.md)
- 集群层面攻击（API Server/etcd/RBAC/横向移动）→ 读 [references/cluster-attacks.md](references/cluster-attacks.md)
- RBAC 权限自检、Pod 内 API 请求、badPods/KubeHound/gitRepo volume → 读 [references/rbac-and-api-abuse.md](references/rbac-and-api-abuse.md)

---

## Phase 1: 环境识别

### 1.1 确认在容器内
```bash
cat /proc/1/cgroup 2>/dev/null | grep -qi 'docker\|kubepods\|containerd'
ls /.dockerenv 2>/dev/null || ls /run/secrets/kubernetes.io 2>/dev/null
hostname    # K8s Pod 名通常含 deployment 名
env | grep -i kube
```

### 1.2 K8s 环境信息收集
```bash
# ServiceAccount Token（几乎每个 Pod 都有）
SA_TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token 2>/dev/null)
CA_CERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace 2>/dev/null)

# API Server 地址
echo $KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT

# 测试 API 权限
curl -sk -H "Authorization: Bearer $SA_TOKEN" \
  https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT/api/v1/namespaces/$NAMESPACE/pods
```

### 1.3 外部端口探测
| 端口 | 服务 | 攻击面 |
|------|------|--------|
| 6443 | API Server | 未授权/Token 利用 |
| 10250 | Kubelet | 命令执行 |
| 10255 | Kubelet (只读) | 信息泄露 |
| 2379 | etcd | 全量数据（含 Secrets） |
| 8080 | API Server (不安全，仅 ≤1.23 遗留) | 完全控制（1.24 起该端口已移除） |

## Phase 2: 攻击决策树

```
当前位置？
├─ 容器内部
│   ├─ 特权容器（privileged=true）→ 挂载宿主机 → 逃逸
│   ├─ 挂载了 hostPath/docker.sock → 逃逸
│   ├─ 有 SA Token → SelfSubjectRulesReview / can-i → RBAC 权限驱动攻击
│   ├─ 能 create pods / pods/exec / impersonate → Pod 创建、进入高权限 Pod 或模拟高权限账户
│   └─ 普通容器 → 内核漏洞/cgroup 逃逸
├─ 可访问 Kubelet (10250)
│   └─ 未授权 → 任意 Pod 命令执行
├─ 可访问 API Server (6443/8080)
│   ├─ 匿名访问 → 创建特权 Pod
│   └─ Token → RBAC 权限枚举
└─ 可访问 etcd (2379)
    └─ 提取所有 Secrets
详细命令 → 参考 references
```

## Phase 3: 容器逃逸速查

The rest: https://github.com/wgpsec/AboutSecurity/blob/HEAD/skills/cloud/k8s-container-escape/SKILL.md
