Overview
A critical vulnerability has been disclosed in Kyverno, the CEL and admission-control policy engine widely used to enforce guardrails on Kubernetes clusters. Tracked as CVE-2026-54523 (CVSS 9.6), the flaw allows a tenant who can only create policies inside their own namespace to force Kyverno's background controller to generate resources — including RoleBindings — in any namespace on the cluster, including kube-system.
In multi-tenant clusters where namespace-scoped policy authoring is delegated to individual teams, this collapses the isolation boundary Kyverno is meant to enforce.
Technical Details
| Field | Value |
|---|---|
| CVE ID | CVE-2026-54523 |
| CVSS Score | 9.6 (Critical) |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N |
| CWE | CWE-862 — Missing Authorization |
| Attack Vector | Network |
| Privileges Required | Low (namespace-scoped policy author) |
| Affected Versions | v1.18.0 up to v1.18.2 (exclusive) |
| Fixed Version | 1.18.2 |
| Published | 2026-08-26 |
How It Works
Kyverno's NamespacedMutatingPolicy CEL compiler exposes the generator library to matchConditions. That library provides a generator.apply(namespace, resources) function intended to create resources scoped to the policy's own namespace — but the compiler does not validate the namespace argument passed to it.
A user who can only create a NamespacedMutatingPolicy in their own namespace can write a matchConditions expression that calls generator.apply() with an arbitrary target namespace string. Kyverno's background controller then dutifully creates the specified resources — including RoleBindings — in that namespace, with no check that the calling policy is actually scoped there.
Because kube-system is a valid target string like any other, a low-privileged tenant can direct the controller to create a RoleBinding inside kube-system, opening a path to cluster-admin-level privilege escalation.
Impact
- Namespace isolation bypass — the core guarantee of namespace-scoped policies (a tenant can only affect their own namespace) does not hold
- Privilege escalation — RoleBindings created in
kube-systemor other privileged namespaces can grant a low-privileged tenant elevated cluster permissions - Multi-tenant blast radius — any cluster that delegates
NamespacedMutatingPolicyauthoring to individual teams or customers is exposed, not just clusters with malicious insiders — a compromised low-privilege service account is enough
No public proof-of-concept was available at time of disclosure, and there are no reports of in-the-wild exploitation.
Remediation
- Upgrade to Kyverno v1.18.2 or later, which validates the
namespaceargument passed togenerator.apply()against the policy's own namespace - Until patched, audit existing
NamespacedMutatingPolicyandNamespacedGeneratingPolicyobjects formatchConditionsthat referencegenerator.applywith a non-self namespace - Restrict who can create namespace-scoped policies via RBAC if immediate patching isn't possible
- Review RoleBindings in
kube-systemand other sensitive namespaces for unexpected entries created by the background controller