GKE Anonymous Pod Create/Update/Patch

Detects create, update, or patch of pods by an unauthenticated anonymous GKE identity. Anonymous pod mutation is a critical misconfiguration signal and a common path for unauthenticated attackers to deploy workloads or maintain access. Includes "system:anonymous" / "system:unauthenticated" and GKE audit rows with a missing principal (seen on unauthenticated Unauthorized/forbidden pod writes).

Elastic rule (View on GitHub)

 1[metadata]
 2creation_date = "2026/07/16"
 3integration = ["gcp"]
 4maturity = "production"
 5updated_date = "2026/07/16"
 6
 7[rule]
 8author = ["Elastic"]
 9description = """
10Detects create, update, or patch of pods by an unauthenticated anonymous GKE identity. Anonymous pod mutation is a
11critical misconfiguration signal and a common path for unauthenticated attackers to deploy workloads or maintain access.
12Includes "system:anonymous" / "system:unauthenticated" and GKE audit rows with a missing principal (seen on
13unauthenticated Unauthorized/forbidden pod writes).
14"""
15false_positives = [
16    """
17    Anonymous pod writes should be rare. If observed from expected automation, anonymous authentication or RBAC for
18    system:anonymous is likely misconfigured and should be remediated rather than broadly excluded.
19    """,
20]
21from = "now-6m"
22index = ["logs-gcp.audit-*"]
23language = "kuery"
24license = "Elastic License v2"
25name = "GKE Anonymous Pod Create/Update/Patch"
26note = """## Triage and analysis
27
28### Investigating GKE Anonymous Pod Create/Update/Patch
29
30Anonymous identities creating or mutating pods indicates the API server accepts unauthenticated workload changes.
31Failed unauthenticated creates may appear with an empty `client.user.email` and `Unauthorized` / forbidden status.
32
33### Investigation steps
34
35- Review `client.user.email`, `event.action`, `event.outcome`, `orchestrator.resource.name`, `orchestrator.namespace`,
36  and `source.ip`.
37- Inspect the pod image, command, and volume mounts for credential theft or reverse shells.
38- Check whether anonymous authentication is enabled and remove RBAC grants to `system:anonymous`.
39
40### False positives
41
42- Essentially none in production; treat as high-priority misconfiguration until proven otherwise.
43
44"""
45references = [
46    "https://kubernetes.io/docs/reference/access-authn-authz/authentication/#anonymous-requests",
47    "https://cloud.google.com/kubernetes-engine/docs/how-to/audit-logging",
48]
49risk_score = 73
50rule_id = "92980750-3373-4f0c-aebd-c2a8563d8e8a"
51severity = "high"
52tags = [
53    "Domain: Cloud",
54    "Domain: Kubernetes",
55    "Data Source: GCP",
56    "Data Source: Google Cloud Platform",
57    "Use Case: Threat Detection",
58    "Tactic: Execution",
59    "Resources: Investigation Guide",
60]
61timestamp_override = "event.ingested"
62type = "query"
63setup = "The GCP Fleet integration with GKE audit logs enabled is required to be compatible with this rule."
64
65query = '''
66data_stream.dataset:gcp.audit and service.name:k8s.io and client.user.email:("system:anonymous" or "system:unauthenticated" or not *) and event.action:(io.k8s.core.v1.pods.create or io.k8s.core.v1.pods.patch or io.k8s.core.v1.pods.update)
67'''
68
69[[rule.threat]]
70framework = "MITRE ATT&CK"
71
72[[rule.threat.technique]]
73id = "T1610"
74name = "Deploy Container"
75reference = "https://attack.mitre.org/techniques/T1610/"
76
77[rule.threat.tactic]
78id = "TA0002"
79name = "Execution"
80reference = "https://attack.mitre.org/tactics/TA0002/"
81
82[rule.investigation_fields]
83field_names = [
84    "@timestamp",
85    "client.user.email",
86    "source.ip",
87    "user_agent.original",
88    "event.action",
89    "event.outcome",
90    "gcp.audit.resource_name",
91    "orchestrator.resource.name",
92    "orchestrator.namespace",
93]

Triage and analysis

Investigating GKE Anonymous Pod Create/Update/Patch

Anonymous identities creating or mutating pods indicates the API server accepts unauthenticated workload changes. Failed unauthenticated creates may appear with an empty client.user.email and Unauthorized / forbidden status.

Investigation steps

  • Review client.user.email, event.action, event.outcome, orchestrator.resource.name, orchestrator.namespace, and source.ip.
  • Inspect the pod image, command, and volume mounts for credential theft or reverse shells.
  • Check whether anonymous authentication is enabled and remove RBAC grants to system:anonymous.

False positives

  • Essentially none in production; treat as high-priority misconfiguration until proven otherwise.

References

Related rules

to-top