Kubernetes Access Could Let Users Escalate to Google Cloud Organization Owner Through KCC

Summary
Config Connector can use its broadly privileged Google Cloud service account to carry out IAM changes requested by Kubernetes users, potentially letting users with namespace access grant themselves organization-wide roles.
Key points
- KCC performs Google Cloud operations through its own service account, so Google Cloud does not see which Kubernetes user initiated a request.
- A user who can create IAMPolicyMember resources in a KCC-managed namespace may be able to grant themselves any role the KCC service account can assign, including organization-wide owner access.
- The issue is a confused deputy risk created by separate Kubernetes RBAC and Google Cloud IAM checks; each authorizes its own side without checking the full request.
- The attack requires namespace access and permission to create the relevant IAM resources, combined with a KCC service account that has broad IAM authority.
- The article says Google considers KCC to be operating as designed and recommends limiting the operator’s permissions rather than changing its authorization model.
- Suggested mitigations include using namespaced mode with separately scoped service accounts, removing unnecessary broad roles, restricting IAM resource creation, and monitoring high-level IAM changes.
- The article notes that AWS Controllers for Kubernetes and Azure Service Operator offer ways to scope controller permissions or identities, reducing potential impact.
Article Details
- Attack Vectors
- A user with permission to create IAMPolicyMember resources in a KCC-managed Kubernetes namespace can induce KCC to grant that user Google Cloud IAM roles available to KCC's service account, potentially including organization-level ownership.
- The privilege-escalation path requires a KCC service account with broad Google Cloud IAM permissions and broad write access to KCC-managed namespaces; the attacker does not need Google Cloud credentials.
- Defensive Notes
- Use KCC namespaced mode with a separately scoped Google service account for each namespace.
- Review KCC's IAM roles at project, folder, and organization levels; remove broad roles such as roles/owner and roles/resourcemanager.organizationAdmin unless strictly required.
- Limit permission to create IAMPolicyMember, IAMPolicy, and IAMPartialPolicy resources to approved platform or infrastructure teams.
- Monitor folder- and organization-level IAM changes made by KCC, particularly changes outside the approved GitOps workflow.
- The article notes that AWS Controllers for Kubernetes separates controllers and scopes roles by service, while Azure Service Operator v2 can use separate managed identities per namespace; both approaches can limit potential impact.
MITRE ATT&CK
People
Vendors
Products
AWS Controllers for Kubernetes (ACK)AWS Controllers for Kubernetes (ACK) separates controllers by service.Azure Service Operator v2Azure Service Operator v2 allows each Kubernetes namespace to use a separate managed identity.Google CloudIn Google Cloud, that often means a service account key: a JSON file that proves who they are and what they're allowed to do.Google Kubernetes Config Connector (KCC)Google's version of this system is Google Kubernetes Config Connector (KCC), which typically runs inside a Google Kubernetes Engine (GKE) cluster.Google Kubernetes Engine (GKE)Google's version of this system is Google Kubernetes Config Connector (KCC), which typically runs inside a Google Kubernetes Engine (GKE) cluster.KubernetesThe Kubernetes community's solution to this is a GitOps operator (also known as a controller):