CVE-2025-55196 Overview
CVE-2025-55196 is a broken access control vulnerability [CWE-284] in External Secrets Operator (ESO), a Kubernetes operator that integrates external secret management systems with cluster workloads. The PushSecret controller invokes List() calls against Secret and SecretStore resources without applying a namespace selector. Attackers with permissions to create or update PushSecret resources and control SecretStore configurations can use label selectors to enumerate and read secrets across the entire cluster. The flaw affects versions 0.15.0 through versions prior to 0.19.2. Successful exploitation enables full disclosure of Kubernetes secrets, including credentials and API tokens stored in arbitrary namespaces.
Critical Impact
An authenticated tenant with PushSecret privileges can exfiltrate cluster-wide secrets, bypassing Kubernetes namespace isolation boundaries.
Affected Products
- External Secrets Operator versions 0.15.0 through 0.19.1
- Kubernetes clusters running the ESO PushSecret controller
- Multi-tenant clusters relying on namespace-scoped RBAC for secret isolation
Discovery Timeline
- 2025-08-13 - CVE-2025-55196 published to NVD
- 2026-04-15 - Last updated in NVD database
Technical Details for CVE-2025-55196
Vulnerability Analysis
The External Secrets Operator synchronizes secrets between Kubernetes and external providers such as AWS Secrets Manager, HashiCorp Vault, and GCP Secret Manager. The PushSecret custom resource directs ESO to take a Kubernetes Secret and push it outward to an external store. To resolve which secrets to push, the controller issues List() operations against the Kubernetes API.
In versions 0.15.0 to 0.19.1, these List() calls omitted a namespace selector. The controller therefore searched across all namespaces rather than restricting the query to the namespace owning the PushSecret resource. The label selectors supplied in the PushSecret spec then matched secrets cluster-wide.
This behavior breaks the namespace boundary that operators commonly use to isolate tenant workloads. The CVSS 4.0 vector indicates network attack vector with low privileges, high confidentiality impact, and no required user interaction.
Root Cause
The root cause is missing access control enforcement [CWE-284] in the controller's resource enumeration logic. The list selector did not pass client.InNamespace(pushSecret.Namespace) to the controller-runtime client. The reconciler trusted the requester's label selector without scoping the query to the resource's own namespace.
Attack Vector
An attacker requires permission to create or update PushSecret and SecretStore resources in any single namespace they control. The attacker crafts a PushSecret referencing a label selector that matches target secrets in other namespaces, and configures a SecretStore pointing to an external endpoint they control. When the controller reconciles the resource, it lists matching secrets across the cluster and pushes their contents to the attacker-controlled destination. No additional Kubernetes RBAC permissions on the victim namespaces are required because the controller's service account performs the privileged read.
The vulnerability is described in prose only because no public proof-of-concept code has been verified. See the GitHub Security Advisory GHSA-fcxq-v2r3-cc8h for technical details.
Detection Methods for CVE-2025-55196
Indicators of Compromise
- PushSecret resources containing broad or wildcard-style label selectors that match secrets outside the resource's namespace
- SecretStore configurations referencing external endpoints not on an approved provider allowlist
- Audit log entries showing the ESO controller service account performing list operations on secrets across many namespaces in short succession
- Outbound network traffic from ESO controller pods to unexpected external secret store URLs
Detection Strategies
- Enable Kubernetes API server audit logging at the Metadata level or higher and alert on list verbs against secrets issued by the ESO service account when target namespaces exceed the ESO operator namespace
- Inventory all PushSecret and SecretStore resources in the cluster and flag any with selectors that resolve to secrets in namespaces other than their own
- Compare the running ESO image tag against version 0.19.2 or later using admission controllers or policy engines such as Kyverno or OPA Gatekeeper
Monitoring Recommendations
- Track creation and update events on PushSecret and SecretStore resources and forward them to a SIEM for correlation with identity context
- Monitor egress traffic from the external-secrets namespace for new destination hosts that were not previously communicated with
- Alert on any change to RBAC bindings granting create or update on pushsecrets.external-secrets.io or secretstores.external-secrets.io
How to Mitigate CVE-2025-55196
Immediate Actions Required
- Upgrade External Secrets Operator to version 0.19.2 or later across all clusters
- Audit existing PushSecret and SecretStore resources for selectors or endpoints indicating attempted cross-namespace access
- Restrict RBAC so only trusted service accounts can create, update, or patchPushSecret and SecretStore resources
- Rotate any Kubernetes secrets, credentials, or tokens that may have been exposed during the vulnerable window
Patch Information
The maintainers patched the issue in External Secrets Operator version 0.19.2. The fix applies a namespace selector to the controller's List() calls. Review the upstream changes in GitHub Pull Request #5109, GitHub Pull Request #5133, and the commits 39cdba5 and de40e8f.
Workarounds
- Restrict cluster RBAC so that only vetted service accounts and operators can manage PushSecret and SecretStore custom resources
- Apply admission policies that reject PushSecret resources containing overly broad label selectors
- Use ClusterSecretStore references with explicit namespaceSelectors and avoid granting tenants permission to create new stores
- Network-restrict the ESO controller egress to an allowlist of approved external secret provider endpoints
# Configuration example
helm upgrade external-secrets external-secrets/external-secrets \
--namespace external-secrets \
--version 0.19.2
kubectl get pushsecrets,secretstores,clustersecretstores -A
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


