Kubetier
← Permission Reference
T0

escalate clusterroles

Write permissions into a ClusterRole beyond what you already hold.

The escalate verb removes the check that normally blocks this, letting you patch an already-bound ClusterRole to inject */* directly with no bind needed.

Creating a new ClusterRole and self-binding it still requires bind on clusterroles separately.

API Group
rbac.authorization.k8s.io
Scope
cluster
Audit Level
RequestResponse

Escalation Paths

  1. Use the escalate verb to bypass privilege-escalation prevention

  2. Patch own bound ClusterRole to add */* rules (must be a role already bound to you)

  3. Permissions expand via the existing binding.

    No bind is needed when patching an already-bound ClusterRole.

    Creating a new role and self-binding it requires bind clusterroles separately

Additional rights needed:

Note:

This is a by-design capability, not a CVE.

The escalate verb bypasses privilege-escalation prevention, so any identity holding it can grant permissions it does not already have.

No patch exists.

K8s docs ↗
  1. Create or update a ClusterRole with an aggregation label such as rbac.authorization.k8s.io/aggregate-to-admin: true.

  2. The ClusterRole aggregation controller merges its rules into the built-in admin/edit/view role.

  3. Prevention applies at write time.

    Without escalate, only rules the caller holds can be injected.

    With escalate, any rules can be injected regardless of caller permissions.

  4. All principals bound to the role gain injected permissions.

    T0 only where admin/edit is cluster-bound or the namespace holds cluster-admin credentials.

Additional rights needed:

Note:

Escalation prevention blocks injection of rules the caller does not hold, even with an aggregate-to-admin label.

The escalate verb is required to inject arbitrary rules.

Without it, only rules the caller already possesses can be aggregated.

K8s docs ↗
K8s docs ↗