Kubetier
  1. Register a fake Node object with status.addresses[InternalIP] = API server internal IP and daemonEndpoints.kubeletEndpoint.Port = 6443

  2. Proxy a request through the fake node by running kubectl get --raw /api/v1/nodes/evil-node/proxy/api/v1/secrets

  3. The API server proxies outbound to that address using its apiserver-kubelet-client certificate, so it authenticates to itself

  4. Before kubeadm 1.29 the certificate carried O=system:masters.

    From 1.29 it carried O=kubeadm:cluster-admins, a group bound to cluster-admin, so the inner request still returned full cluster access

  5. Current kubeadm binds the certificate to system:kubelet-api-admin instead, narrowing the inner request to the node API (nodes/proxy, metrics, stats, log) rather than cluster-admin

  6. The redirection itself is unchanged by that fix, so the API server can still be pointed at an attacker-chosen address

  7. Post-fix, the gain is network position rather than RBAC, since triggering it already requires get on nodes/proxy.

    The API server reaches addresses the caller cannot, under its own identity

Rights needed:

Note:

Those releases narrow the certificate to system:kubelet-api-admin, which removes the cluster-admin outcome but not the redirection.

kubernetes#119270 is still open, reopened for audit re-evaluation.

1.32 reached end of life first, so it stays vulnerable.

No CVE covers this path.

K8s docs ↗