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.

derived gcp emits CanModifyConfiguration

match (effective permission)

{ "action": "container.clusters.update", "resource_type": "container.googleapis.com/Cluster" }

emit

source typeIdentity
target typeKubernetesCluster
source<principal>
target<GKE cluster>
permissionscontainer.clusters.update
conditionsiam_permission
state logicACTIVE 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."
move · open · esc close