Summary
CVE-2026-22039 fixed cross-namespace privilege escalation in Kyverno's apiCall context by validating the URLPath field. However, the ConfigMap context loader has the identical vulnerability — the configMap.namespace field accepts any namespace with zero validation, allowing a namespace admin to read ConfigMaps from any namespace using Kyverno's privileged service account. This is a complete RBAC bypass in multi-tenant Kubernetes clusters.
Impact
| CVE-2026-22039 (fixed) | This vulnerability | |
|---|---|---|
| Location | apiCall.URLPath field | configMap.namespace field |
| Validation | Namespace regex check | None |
The exploit chain:
- Namespace admin creates a Kyverno
Policyin their namespace using standard RBAC. - Policy uses
context.configMap.namespace: "victim-ns"to reference another namespace. - Kyverno's admission controller SA (which has cluster-wide
viewrights) fetches the ConfigMap. - The policy mutates a trigger ConfigMap to exfiltrate the stolen data via annotations.
In multi-tenant clusters where namespace boundaries are the security perimeter, this trivially defeats that perimeter for every ConfigMap in the cluster.
Detection
Audit Policy and ClusterPolicy resources whose context block uses configMap.namespace referencing a namespace other than the policy's own. Anything outside the same-namespace pattern is the affected primitive.
Pair with audit-log review for unexpected get/list actions on ConfigMaps in sensitive namespaces (kube-system, namespaces hosting tenant-private workloads) issued by the Kyverno admission controller's SA.
Mitigation
Upgrade Kyverno to v1.17.2 or later. v1.17.2 also includes the patch for the related apiCall confused-deputy issue (CVE-2026-41323, CVE-2026-40868) — upgrade once, mitigate three.
Workarounds until patched:
- Restrict who can create or update Kyverno
Policyresources via tight RBAC, especially in shared / multi-tenant clusters. - Audit existing policies for cross-namespace
configMap.namespacereferences and remove them. - Where feasible, prefer CEL-based policies that do not rely on the affected context loaders.