← All hunts high TLP:CLEAR

Kubernetes Operator RBAC Abuse and Secret Theft

A vulnerable or outdated Kubernetes operator is running with excessive ClusterRole permissions, allowing an attacker to exfiltrate cluster-wide secrets or establish unauthorized AI agent bridges to external endpoints.

Based on research by Unit 42 2026-09-30 8 steps · 3 queries T1190 T1195 T1528 T1548 T1552

Brief

Why now

Kubernetes operators manage complex software lifecycles by automating tasks that usually require human intervention. To do this, they often require high-level ClusterRole permissions, including the ability to read secrets and manage pods across the entire cluster. A recent report by Unit 42, OperTraitors: How Kubernetes Operators Betray Your Security Posture, highlights how attackers or even 'agentic' AI components can use these privileged service accounts as silent backdoors. Vulnerabilities like CVE-2026-6389 in IBM Turbonomic demonstrate that these controllers are not just infrastructure components, but significant parts of the supply chain attack surface.

How the hunt flows

The hunt begins by inventorying known vulnerable software. The first step queries vulnerability findings for specific CVEs and high-risk operator packages like Prometurbo and Datadog. An analyst looks for instances where patching has lagged or where legacy versions remain in production clusters.

Next, the hunt baselines the prevalence of operator images across the fleet. Software inventory logs help identify rare or outdated versions that stand out from the standard deployment. This step provides the specific hostnames and image versions that require deeper behavioral scrutiny.

The investigation then pivots to network egress. The query monitors processes associated with operator controllers, such as 'manager' or 'prometurbo', for outbound connections to non-internal IP addresses. While standard operators communicate with the Kubernetes API server or internal metrics endpoints, connections to the public internet suggest data exfiltration or the presence of an unauthorized agent bridge.

Finally, a triage phase correlates the identified versions with the network activity. A verdict is reached based on whether a vulnerable version is performing unexplained external communication, leading to a manual review of the associated Kubernetes RBAC manifests.

What the hunt cannot see

This hunt relies on process and network telemetry rather than direct manifest inspection. It cannot confirm if a service account possesses 'secrets' read access directly through the data surfaces used; the risk is inferred from the software version and its behavior. Furthermore, without Kubernetes API audit logs, the hunt cannot identify which specific secrets were accessed, only that the process established an outbound connection. To close these gaps, practitioners should integrate RBAC auditing and forward API server logs to their central security lake.

Steps

  1. Scope vulnerable operator versions

    Query · scoping

    Identify assets running software versions impacted by CVE-2026-6389 or identified as potentially high-risk operators.

    reads hb_vulnerability_findingsql
    SELECT device_uid, cve_uid, affected_package_name, affected_package_version, severity FROM hb_vulnerability_finding WHERE (cve_uid = 'CVE-2026-6389' OR instr(',' || '{{operator_packages}}' || ',', ',' || LOWER(affected_package_name) || ',') > 0) AND status != 'suppressed' AND collected_at >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. A list of asset IDs and vulnerable packages. Silence indicates no known operator vulnerabilities are reporting.

  2. Stack-count operator images

    Query · baseline

    Identify rare or outdated operator images across the fleet to highlight potentially unmanaged deployments and collect hostnames.

    reads hb_software_inventorysql
    SELECT package_name, package_version, device_hostname, COUNT(DISTINCT device_hostname) AS host_count, MIN(collected_at) AS first_seen FROM hb_software_inventory WHERE asset_scope = 'container_image' AND instr(',' || '{{operator_packages}}' || ',', ',' || LOWER(package_name) || ',') > 0 AND collected_at >= datetime('now', '-{{lookback_days}} days') GROUP BY package_name, package_version, device_hostname ORDER BY host_count ASC

    What a hit looks like. Rare operator versions stand out at the top of the count. The device_hostname values found here should be used to fill the scope_hosts parameter.

  3. Operator network egress behavior

    Query · detection candidate

    Identify operator processes communicating with external endpoints, which may indicate agent bridges or exfiltration.

    reads hb_network_connectionsql
    SELECT device_hostname, process_name, process_path, dst_endpoint_ip, dst_endpoint_port, direction, time FROM hb_network_connection WHERE (instr(',' || '{{operator_processes}}' || ',', ',' || LOWER(process_name) || ',') > 0) AND direction = 'outbound' AND dst_endpoint_ip NOT LIKE '10.%' AND dst_endpoint_ip NOT LIKE '172.16.%' AND dst_endpoint_ip NOT LIKE '192.168.%' AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Connections to the public internet from processes like 'prometurbo' or 'manager' restricted to scoped hosts. Standard controllers should primarily talk to internal API servers.

  4. Weigh operator risk exposure

    Agent triage

    Assess whether vulnerable operators or rare images are exhibiting suspicious network behavior.

  5. Route based on risk

    Decision

    Route findings for remediation if high risk is confirmed.

  6. Remediation and RBAC review

    Analyst task

    Analyze operator service accounts and apply PoLP.

  7. Close out

    Analyst task

    Record the findings and transition to monitoring.

Coverage

Scenario coverage

StageCoveredHow, or why not
Vulnerable Operator Deployment
T1195 · T1190
Yes scope-vulnerable-operators, operator-image-prevalence
Excessive RBAC Provisioning
T1548
Not visible Direct RBAC manifest inspection is not supported by hb_ surfaces; presence of high-risk versions is used as a proxy.
Unauthorized Secret Access
T1552 · T1528
Yes operator-network-behavior

Blind spots

  • Needs Kubernetes ClusterRole and Binding manifests. A negative result proves presence but not permission; the risk is inferred from the package version and behavior. It would answer Does the service account possess cluster-wide secret read access?. Remediation: Integrate Kubernetes RBAC auditing into the security pipeline.
  • Needs Kubernetes Audit Logs. We can see outbound traffic but cannot confirm if sensitive data like DB credentials or TLS keys were exfiltrated. It would answer Which specific secrets were accessed by the operator controller?. Remediation: Enable and forward API server audit logs to the central lake.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
lookback_daysnumber14Days of history to examine.
operator_packageslist[string]prometurbo, datadog-operator, k8sgpt-operator, ibm-turbonomicPackage names associated with Kubernetes operators to audit.
operator_processeslist[string]prometurbo, datadog-operator, manager, controllerProcess names found in operator controller images.
scope_hostslist[host]—Optional host list to narrow behavior search; empty means all hosts.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Network telemetrynetworknetwork

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A standard rule alerts on a CVE; this hunt pivots from vulnerability inventory
  to prevalence across the fleet and behavioral egress patterns to identify the specific
  risk of autonomous 'agentic' operators acting as bridges.
blind_spots:
- id: missing-rbac-manifests
  owner: cloud-platform
  question: Does the service account possess cluster-wide secret read access?
  remediation: Integrate Kubernetes RBAC auditing into the security pipeline.
  requires: Kubernetes ClusterRole and Binding manifests
  risk: A negative result proves presence but not permission; the risk is inferred
    from the package version and behavior.
  stage: excessive-rbac-provisioning
- id: no-k8s-audit-telemetry
  owner: soc
  question: Which specific secrets were accessed by the operator controller?
  remediation: Enable and forward API server audit logs to the central lake.
  requires: Kubernetes Audit Logs
  risk: We can see outbound traffic but cannot confirm if sensitive data like DB credentials
    or TLS keys were exfiltrated.
  stage: unauthorized-secret-access
coverage:
- stage: vulnerable-operator-deployment
  status: covered
  steps:
  - scope-vulnerable-operators
  - operator-image-prevalence
- blind_spot: missing-rbac-manifests
  reason: Direct RBAC manifest inspection is not supported by hb_ surfaces; presence
    of high-risk versions is used as a proxy.
  stage: excessive-rbac-provisioning
  status: not_visible
- stage: unauthorized-secret-access
  status: covered
  steps:
  - operator-network-behavior
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: keep-as-periodic-hunt
  justification: Overly privileged Kubernetes operators serve as high-impact silent
    backdoors for environment compromise; auditing their exposure is a core requirement
    for cluster security posture.
  methodology: model-assisted
  trigger: intel-report
hypothesis: A vulnerable or outdated Kubernetes operator is running with excessive
  ClusterRole permissions, allowing an attacker to exfiltrate cluster-wide secrets
  or establish unauthorized AI agent bridges to external endpoints.
labels:
- hunt
- attack.t1195
- attack.t1190
- attack.t1548
- attack.t1552
- attack.t1528
- credential access
- initial access
- privilege escalation
name: Kubernetes Operator RBAC Abuse and Secret Theft
parameters:
  lookback_days:
    default: '14'
    description: Days of history to examine.
    from:
      kind: manual
      observed: '2026-09-29'
      ref: hunt-standard
    type: number
  operator_packages:
    default:
    - prometurbo
    - datadog-operator
    - k8sgpt-operator
    - ibm-turbonomic
    description: Package names associated with Kubernetes operators to audit.
    from:
      kind: article
      observed: '2026-09-29'
      ref: unit42-opertraitors
    type: list[string]
  operator_processes:
    default:
    - prometurbo
    - datadog-operator
    - manager
    - controller
    description: Process names found in operator controller images.
    from:
      kind: article
      observed: '2026-09-29'
      ref: unit42-opertraitors
    type: list[string]
  scope_hosts:
    default: []
    description: Optional host list to narrow behavior search; empty means all hosts.
    from:
      kind: manual
      observed: '2026-09-29'
      ref: analyst-input
    type: list[host]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://unit42.paloaltonetworks.com/agentic-ai-kubernetes-operator-risks/
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: Start with production clusters running IBM Turbonomic or Datadog components.
  Focus on operators deployed via OLM/OperatorHub which are often outdated.
references:
- name: 'OperTraitors: How Kubernetes Operators Betray Your Security Posture'
  url: https://unit42.paloaltonetworks.com/agentic-ai-kubernetes-operator-risks/
related:
- hunt: kubernetes-unauthorized-api-access
  reason: This hunt focuses specifically on operator-logic and supply chain risks
    rather than generic API abuse.
  relation: sibling
scenario:
  stages:
  - name: Vulnerable Operator Deployment
    observables:
    - IBM Turbonomic prometurbo agent version 8.6.0 through 8.17.6
    - CVE-2026-6389
    - Datadog operator deployment via OperatorHub (OLM)
    - Outdated manifests in OperatorHub/OLM
    slug: vulnerable-operator-deployment
    tactic: initial-access
    techniques:
    - T1195
    - T1190
  - name: Excessive RBAC Provisioning
    observables:
    - 'Service account bound to ClusterRole with apiGroups: [""]'
    - ClusterRole granting get, list, watch verbs on secrets resource
    - 'automountServiceAccountToken: true'
    - Implicit paths to cluster admin access via wildcards
    slug: excessive-rbac-provisioning
    tactic: privilege-escalation
    techniques:
    - T1548
  - name: Unauthorized Secret Access
    observables:
    - Listing secrets in namespaces unrelated to the operator
    - Accessing administrative service account tokens
    - Dumping database credentials or TLS certificates
    - API calls from unexpected IP addresses
    slug: unauthorized-secret-access
    tactic: credential-access
    techniques:
    - T1552
    - T1528
  summary: Attackers exploit Kubernetes operators that possess excessive RBAC privileges,
    often introduced through outdated or abandoned supply chain components in registries
    like OperatorHub. By compromising a controller or its service account, an attacker
    can leverage cluster-wide permissions to access secrets, including administrative
    tokens and API keys, leading to full cluster compromise.
severity: high
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
  network:
    category: network
    name: Network telemetry
    telemetry:
    - network
tlp: clear
type: investigation
---


# Kubernetes Operator RBAC Abuse and Secret Theft

Kubernetes operators often rely on highly privileged service accounts to automate lifecycle management. This hunt identifies operators with known vulnerabilities, such as CVE-2026-6389 in IBM Turbonomic, and analyzes their prevalence and network behavior. By stack-counting operator versions and monitoring for outbound connections to non-internal IP addresses, we can identify misconfigured controllers or AI-enhanced operators acting as unauthorized gateways. The hunt moves from initial inventory scoping to behavioral analysis of network egress, identifying where excessive RBAC permissions may be serving as a silent backdoor.

## scope-vulnerable-operators
<!-- Scope vulnerable operator versions -->
Identify assets running software versions impacted by CVE-2026-6389 or identified as potentially high-risk operators.

```sqlite target=endpoint role=scoping params=(operator_packages=operator_packages, lookback_days=lookback_days)
~~~yaml
expected: A list of asset IDs and vulnerable packages. Silence indicates no known
  operator vulnerabilities are reporting.
reads:
- device_uid
- cve_uid
- affected_package_name
- affected_package_version
- severity
silence: not_evidence_of_absence
source: hb_vulnerability_finding
verified: dry-run
verified_at: '2026-09-30'
~~~
SELECT device_uid, cve_uid, affected_package_name, affected_package_version, severity FROM hb_vulnerability_finding WHERE (cve_uid = 'CVE-2026-6389' OR instr(',' || '{{operator_packages}}' || ',', ',' || LOWER(affected_package_name) || ',') > 0) AND status != 'suppressed' AND collected_at >= datetime('now', '-{{lookback_days}} days')
```

## operator-image-prevalence
<!-- Stack-count operator images -->
Identify rare or outdated operator images across the fleet to highlight potentially unmanaged deployments and collect hostnames.

```sqlite target=endpoint role=baseline params=(operator_packages=operator_packages, lookback_days=lookback_days)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Rare operator versions stand out at the top of the count. The device_hostname
  values found here should be used to fill the scope_hosts parameter.
prevalence:
  by: device_hostname
  key:
  - package_name
  - package_version
  rare_below: 3
reads:
- package_name
- package_version
- device_hostname
- asset_scope
- collected_at
silence: not_evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-09-30'
~~~
SELECT package_name, package_version, device_hostname, COUNT(DISTINCT device_hostname) AS host_count, MIN(collected_at) AS first_seen FROM hb_software_inventory WHERE asset_scope = 'container_image' AND instr(',' || '{{operator_packages}}' || ',', ',' || LOWER(package_name) || ',') > 0 AND collected_at >= datetime('now', '-{{lookback_days}} days') GROUP BY package_name, package_version, device_hostname ORDER BY host_count ASC
```

## operator-network-behavior
<!-- Operator network egress behavior -->
Identify operator processes communicating with external endpoints, which may indicate agent bridges or exfiltration.

```sqlite target=network role=detection-candidate params=(operator_processes=operator_processes, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Connections to the public internet from processes like 'prometurbo' or 'manager'
  restricted to scoped hosts. Standard controllers should primarily talk to internal
  API servers.
reads:
- device_hostname
- process_name
- process_path
- dst_endpoint_ip
- dst_endpoint_port
- direction
- time
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-09-30'
~~~
SELECT device_hostname, process_name, process_path, dst_endpoint_ip, dst_endpoint_port, direction, time FROM hb_network_connection WHERE (instr(',' || '{{operator_processes}}' || ',', ',' || LOWER(process_name) || ',') > 0) AND direction = 'outbound' AND dst_endpoint_ip NOT LIKE '10.%' AND dst_endpoint_ip NOT LIKE '172.16.%' AND dst_endpoint_ip NOT LIKE '192.168.%' AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## agent-triage
<!-- Weigh operator risk exposure -->
```agent target=hunter
cite: required
context:
- scope-vulnerable-operators
- operator-image-prevalence
- operator-network-behavior
max_iterations: 4
objective: Determine if any vulnerable or rare operator images are performing unauthorized
  network communication by specifically cross-referencing the versions identified
  in the scoping steps with the external destination IPs found in the network activity
  logs.
success_criteria: A risk verdict citing specific hosts, operator versions, and destination
  IPs.
tools:
- endpoint
- network
```

## exposure-decision
<!-- Route based on risk -->
if~: "the agent-triage verdict identifies vulnerable versions (e.g. Prometurbo < 8.17.6) with unexplained external egress" (confidence: high, judge=hunter)
then: → remediation-review
indeterminate: → remediation-review
unavailable: → remediation-review (blind_spot: missing-rbac-manifests)
else: → close-out

## remediation-review
<!-- Remediation and RBAC review -->
```manual target=analyst
For each flagged operator, extract its YAML manifest. Verify if the ServiceAccount is bound to a ClusterRole granting 'secrets' access. Update vulnerable operators like Prometurbo to the latest version and downscope RBAC permissions to the managing namespace only.
```
→ close-out

## close-out
<!-- Close out -->
```manual target=analyst
Document the audited versions. Note any operators found in default registries like OperatorHub that have since been abandoned by the vendor. Feedback anomalous egress patterns to the detection team for permanent rules.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.