open-feature-operator CVE-2026-54495
MEDIUMSeverity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Network vector via API server; low privileges required; no user interaction; low confidentiality impact.
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
Lifecycle Timeline
2DescriptionGitHub Advisory
Summary
A namespaced FeatureFlagSource or InProcessConfiguration resource can be referenced cross-namespace via the openfeature.dev/featureflagsource annotation using the documented {NAMESPACE}/{NAME} syntax. The operator resolves the referenced resource cluster-wide and materializes its contents (env vars, flagd sidecar arguments including httpSyncBearerToken, sync URIs, supporting ConfigMaps) into the referencing workload.
On multi-tenant clusters that treat namespaces as trust boundaries, a tenant who can deploy a controller-owned workload in their own namespace can cause the operator to read another tenant's FeatureFlagSource / InProcessConfiguration spec contents.
Impact
- Single-tenant clusters: not impacted.
- Multi-tenant clusters using namespaces as trust boundaries: tenant-to-tenant disclosure of any data placed inline in
FeatureFlagSource/InProcessConfigurationspec, includingspec.envVarsliteral values,spec.httpSyncBearerToken, and sync URIs.
Behavior is documented
The cross-namespace {NAMESPACE}/{NAME} annotation syntax is intentional and documented in docs/annotations.md and docs/feature_flag_source.md. The operator's cluster-wide RBAC scope is intentional. Namespace-as-trust-boundary is not part of the operator's current stated security model.
This advisory makes the tenancy assumption explicit and tracks the architectural change that will eliminate the implicit cross-namespace pattern.
Corrections to the original report
Two technical points in the original report require correction:
secretKeyRef/configMapKeyRefcross-namespace disclosure is not possible via this path. Kubelet resolves these asLocalObjectReferenceagainst the pod's own namespace; the operator does not bypass that. The actual disclosure surface isFeatureFlagSource/InProcessConfigurationspec contents the operator itself materializes (inlineenvVarsvalues,httpSyncBearerToken, sync URIs).create featureflagsourcesis not a prerequisite. The webhook rejects pods without OwnerReferences (pod_webhook.go:75-77), so the prerequisite iscreateon a workload controller (deployments,statefulsets,daemonsets,jobs,cronjobs,replicasets) in a namespace the attacker controls.FeatureFlagSourcecreate in any namespace is not required.
Mitigations
As with any Kubernetes CRD, treat the spec content of FeatureFlagSource and InProcessConfiguration as readable by anyone with read access to the resource, and don't place plaintext secrets in CR spec fields. Fields most likely to bite users:
spec.sources[].source, when the URI embeds credentials (e.g.https://user:pass@host/repo)spec.sources[].certPath, if the path itself is sensitive- inline
spec.envVars[].value(usevalueFrom.secretKeyRefinstead; kubelet enforces same-namespace resolution and the secret value is not stored in the CR)
If developers treat namespaces as trust boundaries:
- restrict
createonfeatureflagsources/inprocessconfigurationsvia RBAC where feasible,
Roadmap
A future release will introduce explicit cluster-scoped CRDs (ClusterFeatureFlagSource, ClusterInProcessConfiguration) and remove implicit cross-namespace resolution. This is a breaking change tracked in #847.
Precedent
This class of issue (authenticated namespace tenant abuses an unenforced cluster-wide surface that crosses an assumed namespace boundary) has Kubernetes precedent: CVE-2020-8554 (External IPs) was accepted as documented posture and mitigated via an opt-in admission plugin.
Credit
Reported by @0xVijay. Thanks for the disclosure. This appears to be an example of https://cwe.mitre.org/data/definitions/668.html. In terms of how it ended up here, it's more of an unimplemented security feature than an "bug". It seems to deviate from reasonable expectations and conventions in the K8s ecosystem. See https://nvd.nist.gov/vuln/detail/cve-2020-8554 as an example of a comparable vulnerability.
AnalysisAI
Cross-namespace information disclosure in open-feature-operator allows a tenant with workload creation privileges to read another tenant's FeatureFlagSource or InProcessConfiguration spec contents on multi-tenant Kubernetes clusters. The operator resolves references across namespace boundaries using a documented annotation syntax, leaking inline env vars, bearer tokens, and sync URIs into the attacker's pod. No public exploit has been identified, and the behavior is intentional but contradicts namespace-as-trust-boundary expectations.
Technical ContextAI
The open-feature-operator is a Kubernetes operator that manages FeatureFlagSource and InProcessConfiguration custom resources (CRDs). It runs with cluster-wide RBAC, allowing it to read resources from any namespace. An annotation openfeature.dev/featureflagsource using {NAMESPACE}/{NAME} syntax triggers the operator to fetch a CR from the specified namespace and inject its contents (env vars, flagd sidecar arguments, sync URIs) into the referencing workload. The root cause is CWE-668: Exposure of Resource to Wrong Sphere, as the operator does not enforce the namespace boundary that cluster administrators may assume. The operator's documentation explicitly describes the cross-namespace feature, but the security model does not treat namespaces as trust boundaries.
RemediationAI
No vendor-released patch identified at time of analysis. The vendor has a roadmap to introduce cluster-scoped CRDs (ClusterFeatureFlagSource, ClusterInProcessConfiguration) to eliminate implicit cross-namespace resolution (tracked in issue #847). Until then, mitigate by: 1) Restricting create permission on workload controllers (deployments, statefulsets, daemonsets, jobs, cronjobs) to only trusted tenants using RBAC; 2) Avoiding storage of plaintext secrets in FeatureFlagSource spec fields-use valueFrom.secretKeyRef for env vars (kubelet enforces same-namespace resolution); 3) If possible, deploy the operator only on single-tenant clusters or implement a mutating admission webhook to block the cross-namespace annotation. Trade-offs: Restricting create on workloads may disrupt legitimate deployments; using secretKeyRef requires the secret to exist in the same namespace as the pod.
More in Kubernetes
View allA critical vulnerability in Kubernetes ingress-nginx controller allows unauthenticated attackers with pod network access
Credential-harvesting malware compromised 84 versions of 42 TanStack npm packages on 2026-05-11 via chained GitHub Actio
Kubernetes ingress-nginx contains a configuration injection vulnerability via the mirror-target and mirror-host Ingress
A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-url` Ingres
A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-tls-match-c
Kubernetes API server in all versions allow an attacker who is able to create a ClusterIP service and set the spec.exter
A security issue was discovered in Kubernetes where a user that can create pods on Windows nodes may be able to escalate
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. Rated critical severity (CVSS 9.9), this vulne
Unauthenticated remote attackers can trigger complete database overwrites, server-side file reads, and SSRF attacks agai
The Kubernetes integration in GitLab Enterprise Edition 11.x before 11.2.8, 11.3.x before 11.3.9, and 11.4.x before 11.4
Fluentd configuration injection in the kube-logging Logging operator before 6.6.0 allows a namespace-scoped user who can
Kyverno Kubernetes policy engine prior to 1.x has a privilege escalation vulnerability (CVSS 9.9) allowing policy bypass
Same weakness CWE-668 – Exposure of Resource to Wrong Sphere
View allSame technique Information Disclosure
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
Share
External POC / Exploit Code
Leaving vuln.today
GHSA-398h-7f66-3h4p