As reported by BleepingComputer, Varonis has surfaced a structural weakness in how many organizations deploy Google Kubernetes Config Connector (KCC) that effectively turns a single YAML manifest into an organization-wide privilege escalation vector. The issue is not a traditional software vulnerability with a CVE — it is a confused deputy problem baked into a common architectural pattern, which makes it arguably more dangerous because no patch will fix it.
What Makes This Different From a Typical Misconfiguration
Most cloud privilege escalation stories we analyze at Shield53 involve excessive IAM bindings on a service account — someone granted roles/owner because it was easier than enumerating the exact permissions needed. The KCC scenario is structurally different and worse: even if platform engineers follow Google's own guidance and give the KCC Google Service Account (GSA) organization-administrator-level roles for legitimate provisioning purposes, every namespace in the cluster shares that single identity. A developer with create rights on IAMPolicyMember resources in their namespace can effectively mint any IAM binding the KCC GSA is allowed to create.
The GitOps model was designed to reduce credential sprawl by eliminating per-developer keys. It succeeded at that. But it inadvertently concentrated an organization's most powerful identity inside a system where the only access control boundary is Kubernetes RBAC — and Kubernetes RBAC was never designed to be a cloud IAM gatekeeper.
Who Is Exposed
roles/resourcemanager.organizationAdmin or roles/owner to the KCC GSA so it could provision any resource type without friction.Small teams running KCC for a single project with tightly controlled cluster admin access face lower risk. The danger scales with the number of developers who can submit manifests and the breadth of the KCC GSA's roles.
Why This Is Hard to Detect
KCC actions look legitimate in Google Cloud Audit Logs — they are performed by the KCC GSA, which is supposed to create IAM bindings. There is no anomaly signal. A defender reviewing logs sees expected provisioning activity. The only way to detect abuse is to correlate which namespace initiated a given KCC reconciliation with what IAM change it produced — and most organizations do not instrument that correlation.
The core failure is using a single identity for both platform-level provisioning and tenant-level resource creation. These are two different trust domains that KCC's default architecture collapses into one.
Shield53 Recommendations
Immediate Actions
- Audit the KCC GSA roles today. Run
gcloud projects get-iam-policyandgcloud organizations get-iam-policyagainst the KCC GSA. If it holds organization-admin or owner-level roles in a multi-team cluster, treat this as a high-priority remediation. - Restrict KCC GSA to the minimum roles needed for the resource types actually in use. Prefer custom roles over
roles/owner. If KCC only manages storage and compute, it does not need IAM administration rights. - Implement namespace-to-project mapping with per-namespace KCC instances where feasible. Each team or project gets its own KCC deployment backed by a scoped GSA with permissions limited to that project — not the organization.
Structural Hardening
- Deploy separate KCC controllers per environment (dev/staging/prod) with GSAs scoped to each environment's project or folder. Never run a single KCC with org-level rights across all environments.
- Add a Kubernetes admission controller policy (using OPA Gatekeeper or Kyverno) that restricts which
IAMPolicyMemberandIAMCustomRolebindings can be created from developer namespaces. Block any binding that grants roles outside the submitter's project scope. - Implement a PR-based approval gate for KCC manifests that touch IAM resources. Require platform-team review on any
IAMPolicyMember,IAMCustomRole, orProjectIamBindingresource before merge. - Build detection rules that alert when KCC creates IAM bindings granting roles like
roles/owner,roles/iam.securityAdmin, orroles/resourcemanager.projectIamAdmin— especially outside expected business hours or from namespaces not previously associated with provisioning. - Enable GCP Access Context Manager and organization policies that restrict which service accounts can receive elevated IAM roles, adding a second gate beyond Kubernetes RBAC.
Architecturally, the fix is straightforward: stop using one identity for two trust domains. Platform provisioning and tenant resource creation should never share a service account with org-wide authority. Until that separation exists, every developer who can submit a KCC manifest is effectively a cloud administrator in waiting.