Skip to content

K8s container escape 2

┌────────────────────────────────────────────────────────────────────────────┐
│                                                                            │
│                           ┌─────────────────┐                              │
│                           │                 │                              │
│                           │   pod-example   │                              │
│                           │                 │                              │
│                           └────────┬────────┘                              │
│                                    │                                       │
│           ┌────────────────────────┼────────────────────────┐              │
│           │                        │                        │              │
│           ▼                        ▼                        ▼              │
│ ┌─────────────────────┐  ┌─────────────────────┐  ┌─────────────────────┐  │
│ │                     │  │                     │  │                     │  │
│ │ container-example-1 │  │ container-example-2 │  │ container-example-3 │  │
│ │                     │  │                     │  │                     │  │
│ └──────┬──────────────┘  └─────────────────────┘  └─────────────────────┘  │
│        │                                                                   │
│        │                                                                   │
│        │............................................................       │
│        │              .             .               .              .       │
│        ▼              ▼             ▼               ▼              ▼       │
│ ┌─────────────┐  ┌─────────┐  ┌──────────┐   ┌─────────────┐  ┌─────────┐  │
│ │  privileged │  │ hostPID │  │ hostPath │   │ hostNetwork │  │ hostIPC │  │
│ └──────┬──────┘  └─────────┘  └──────────┘   └─────────────┘  └─────────┘  │
│        │                                                                   │
│        └─────┬───────────┬────────────────┬─────────────────┐              │
│              │           │                │                 │              │
│              ▼           ▼                ▼                 ▼              │
│           ┌──────┐  ┌───────────┐ ┌──────────────────┐  ┌────────┐         │
│           │ root │  │ SYS_ADMIN │ │ lack an AppArmor │  │ cgroup │         │
│           └──┬───┘  └─────┬─────┘ └─────────┬────────┘  └───┬────┘         │
│              │            │                 │               │              │
│              │            │                 │               │              │
│              └────────────┴──────────┬──────┴───────────────┘              │
|│                                      ▼                                     │
│                                ┌───────────┐                               │
│                                │  exploit  │                               │
│                                └─────┬─────┘                               │
│                                      │                                     │
│                                      ▼                                     │
│   ┌──────────────────────────────────────────────────────────────────────┐ │
│   │                         container escapes                            │ │
│   └──────────────────────────────────────────────────────────────────────┘ │
│                                                                            │
└────────────────────────────────────────────────────────────────────────────┘

Pod / privileged

kubectl get pod <pod-name> --namespace=<namespace> -o json | jq -r '.spec.containers[].securityContext.privileged'

Pod / hostPID

kubectl get pod <pod-name> --namespace=<namespace> -o json | jq -r '.spec.hostPID'

Pod / hostPath

kubectl get pod <pod-name> --namespace=<namespace> -o json | jq -r '.spec.volumes[].hostPath'

Pod / hostNetwork

kubectl get pod <pod-name> --namespace=<namespace> -o json | jq -r '.spec.hostNetwork'

Pod / hostIPC

kubectl get pod <pod-name> --namespace=<namespace> -o json | jq -r '.spec.hostIPC'

SYS_ADMIN

capsh --print | grep sys_admin

Pod / cgroup

grep cgroup /proc/filesystems

Reference