CertGrid CertGrid
Hands-on Lab·Kubernetes and Cloud Native Security Associate

Compromised Container Blast Radius

Assume the application is already owned - a dependency, an upload handler, an unauthenticated admin path - and ask what the attacker now has. On a default cluster the answer is root, a bounded capability set, and a credential nobody chose to give them.

Kubernetes Threat Model Guide 28 of 42 Intermediate

CapEff is read from /proc/1/status and reflects containerd's default capability set, which does not include CAP_SYS_ADMIN. Containers run as root unless the image or the Pod spec says otherwise.

The cka5001 cluster: one control plane and 3 schedulable workers, on Cilium.
Server NameIP AddressOSRolesCPURAMHDD
CKA5001192.168.0.41Ubuntu 26.04 LTSControl Plane Node (tainted NoSchedule)2 Core4 GB50 GB
CKA5001-NODE01192.168.0.42Ubuntu 26.04 LTSWorker Node2 Core4 GB50 GB
CKA5001-NODE02192.168.0.43Ubuntu 26.04 LTSWorker Node2 Core4 GB50 GB
CKA5001-NODE03192.168.0.44Ubuntu 26.04 LTSWorker Node2 Core4 GB50 GB

This guide includes

Use this when the assumption is that the application is already owned. This matters because the interesting question is not how they got in - it is what the container was handed, and a mounted token is a credential nobody asked for.

Before you start

  1. The starting position: root, and a credential you did not ask for

  2. Root in the container is not root on the node

  3. What the token is allowed to do

  4. Using it, and reaching the neighbour

  5. The mitigation you can see

Official sources