📋 What Is It?
Misconfigured Cluster Components is the risk that the machinery running Kubernetes itself - kube-apiserver, etcd, kube-scheduler, kube-controller-manager, every node's kubelet, kube-proxy, and add-ons - is deployed with insecure settings. The control plane is the trust root of the entire cluster: a single reachable, over-permissive component (an API server answering anonymous callers, a kubelet executing commands with no auth, an etcd reachable without a client certificate) collapses every control built above it. Unlike K01 (a bad pod) or K04 (no admission engine), K09 is about the components' own flags, ports, and certificates.
⚠️ Common Exploits
- Anonymous API:
--anonymous-auth=trueletssystem:anonymousin - AlwaysAllow authZ: RBAC effectively switched off - every request approved
- Legacy Insecure Port:
--insecure-port=8080- no TLS, no auth, no authz - Open Kubelet (10250): anonymous + AlwaysAllow exposes
/exec,/run - Read-Only Kubelet (10255): unauthenticated pod specs, env vars, metrics
- Exposed etcd (2379): no mTLS dumps every Secret in one command
- Missing Admission / Audit: no NodeRestriction, PodSecurity, or audit trail
🔴 Attack Flow
↓
2. Probe authN/authZ - anonymous? AlwaysAllow? no etcd client cert?
↓
3. Exploit - kubelet
/exec, etcd get --prefix, create a pod↓
4. Escalate - steal SA tokens, reach cloud metadata, move node to node
↓
5. IMPACT: RCE on nodes, all Secrets exposed, full takeover!
❌ Vulnerable Code
✅ Secure Code
✓ Prevention Checklist
- API server:
--anonymous-auth=false,--authorization-mode=Node,RBAC - No legacy insecure port or insecure bind address
- Enable NodeRestriction and PodSecurity admission plugins
- Kubelet: anonymous off,
authorization.mode: Webhook - Disable the kubelet read-only port (
readOnlyPort: 0) - etcd: require mutual TLS, private interface only
- Encrypt Secrets at rest via
EncryptionConfiguration(KMS) - Enable API-server audit logging with a defined policy
- Set
--profiling=false; bind component metrics to localhost - Rotate certificates; never ship default/self-signed certs
- Run
kube-bench(CIS Benchmark) on a schedule, fail on regression - Scan cluster IaC in CI (kubescape, Polaris, checkov, Trivy)
🔍 Detection & Tools
Kubernetes Tools:
Guardrails:
How to Test:
kube-bench run --targets master,node,etcd,policiesagainst the CIS Benchmark- Probe API anonymously:
curl -sk https://TARGET:6443/api/v1/pods - Check kubelet:
curl -sk https://NODE:10250/podsand10255 - Test etcd:
etcdctl --endpoints=http://TARGET:2379 get / --prefixshould fail - Gate CI on any
kube-benchFAIL (JSON output + jq)
🌍 Real-World
- Unauthenticated Dashboard / API → Cryptojacking: a control surface reachable from the internet with auth effectively disabled; automated actors schedule mining pods and reach cloud credentials - one of the most consistently reported Kubernetes incident classes.
- Exposed etcd Disclosing Every Secret: etcd on a routable interface without client-cert auth, or a readable snapshot - one reachable datastore equals the entire cluster's credentials.
- Open Kubelet → Node-Level Code Execution: kubelets with anonymous auth + AlwaysAllow; research tooling has repeatedly demonstrated enumerating pods then
/execagainst internet-exposed kubelets.
Described as recurring incident classes - no invented CVEs or statistics. The durable lesson: component misconfiguration is common on hand-built clusters, mechanically detectable with CIS tooling, and catastrophic.
📌 Quick Tips
- DO NOT enable anonymous auth or use
AlwaysAllow - DO NOT bind the legacy insecure port or open 10255
- DO NOT run etcd plaintext or without encryption-at-rest
- DO require mTLS between every component
- DO enable NodeRestriction, PodSecurity, and audit
- DO benchmark continuously with kube-bench (CIS)
- DO verify the managed shared-responsibility line
📜 Related Risks
Connected OWASP Kubernetes Top 10:
- K06 Broken Authentication - same anonymous/etcd doors
- K01 Insecure Workloads - a bad pod vs. a bad component
- K04 No Policy Enforcement - the admission engine
- K05 Inadequate Logging & Monitoring - audit routing