Executive brief
Kyverno is a policy engine for Kubernetes that enforces security and compliance rules. A vulnerability in versions 1.18.0–1.18.1 allows a tenant with permission to create namespace-scoped policies to bypass namespace isolation and create resources (ConfigMaps, Secrets, NetworkPolicies, RoleBindings) in any namespace, including protected system namespaces like kube-system. An attacker can exploit this to inject malicious configuration, disrupt cluster networking, or escalate privileges cluster-wide.
Technical details
The vulnerability is a missing authorization check (CWE-862) in Kyverno's CEL policy compiler. In versions 1.18.0–1.18.1, the `generator` library is unintentionally exposed to NamespacedMutatingPolicy match condition expressions, allowing a tenant to call `generator.apply(namespace, resources)` with an arbitrary namespace argument. The vulnerable function `GenerateResources()` in `pkg/cel/libs/context.go:177` accepts the namespace parameter without validation, unlike correctly-guarded equivalents in ConfigMap loaders and API call handlers. When a namespaced mutating policy is applied (e.g., on ConfigMap creation in a tenant namespace), the admission controller—which runs with cluster-wide RBAC permissions—executes the CEL expression and creates resources in the attacker-specified namespace. No prior authorization check enforces namespace scope, enabling privilege escalation and cross-namespace resource injection. Patches are available in v1.18.2 and later.
Affected products
- Kyverno Kyverno >=1.18.0, <=1.18.1
Timeline
- 2026-05-20: other: Vulnerability reproduced on main branch
- 2026-07-13: disclosed: CVE-2026-54523 / GHSA-79gf-7frw-68m9 published
- 2026-07-22: other: Advisory clarified to document actual v1.18.1 attack vector (NamespacedMutatingPolicy in matchConditions, not NamespacedGeneratingPolicy)
- 2026-08-26: patched: v1.18.2 released with fix