gcp-gke-cluster-update-config
container.clusters.update allows modifying cluster-wide security configuration: disabling Workload Identity, changing master auth networks, disabling Binary Authorization, or enabling EXPOSE_ALL_SCOPES metadata - each is a misconfiguration that opens downstream escalation paths.
match (effective permission)
{
"action": "container.clusters.update",
"resource_type": "container.googleapis.com/Cluster"
}
emit
| source type | Identity |
|---|---|
| target type | KubernetesCluster |
| source | <principal> |
| target | <GKE cluster> |
| permissions | container.clusters.update |
| conditions | iam_permission |
| state logic | ACTIVE if container.clusters.update is confirmed effective at the project or cluster scope. The downstream impact (WI disabled, metadata exposed, etc.) is CONDITIONAL on which specific mutation is applied — this emits the configuration-change capability; downstream rules (e.g., node SA exposure) fire once the config is changed. |
Narrative
{principal.name} can update the GKE cluster {cluster.name} (container.clusters.update), enabling reconfiguration of Workload Identity, node pool metadata mode, master auth networks, and admission controllers - each of which can open downstream escalation paths.
Raw rule rules/derived/gcp/gke.yaml
id: gcp-gke-cluster-update-config
emits: CanModifyConfiguration
description: "container.clusters.update allows modifying cluster-wide security configuration: disabling\
\ Workload Identity, changing master auth networks, disabling Binary Authorization, or enabling EXPOSE_ALL_SCOPES\
\ metadata \u2014 each is a misconfiguration that opens downstream escalation paths."
match_effective_permission:
action: container.clusters.update
resource_type: container.googleapis.com/Cluster
emit:
source_type: Identity
target_type: KubernetesCluster
source: <principal>
target: <GKE cluster>
permissions:
- container.clusters.update
conditions:
- iam_permission
state_logic: "ACTIVE if container.clusters.update is confirmed effective at the project or cluster scope.\
\ The downstream impact (WI disabled, metadata exposed, etc.) is CONDITIONAL on which specific mutation\
\ is applied \u2014 this emits the configuration-change capability; downstream rules (e.g., node SA\
\ exposure) fire once the config is changed."
confidence: 0.9
derived_from:
- '<effective iam_permission: container.clusters.update on cluster>'
false_positive_note: container.clusters.update is a broad permission; the actual attack impact depends
on WHICH field is updated. Disabling WI (workloadIdentityConfig) reverts pods to node SA metadata
access (feeds gcp-gke-node-sa-legacy-exposure). Disabling Binary Authorization may allow arbitrary
image pulls. Modifying masterAuthorizedNetworksConfig to 0.0.0.0/0 opens the API server. Emit a single
CanModifyConfiguration edge and let the analyst trace the specific sub-attack via gcp-gke-node-sa-legacy-exposure
or other rules.
narrative: "{principal.name} can update the GKE cluster {cluster.name} (container.clusters.update),\
\ enabling reconfiguration of Workload Identity, node pool metadata mode, master auth networks, and\
\ admission controllers \u2014 each of which can open downstream escalation paths."