Summary
A critical authorization boundary bypass in namespaced Kyverno Policy apiCall. The resolved urlPath is executed using the Kyverno admission controller ServiceAccount, with no enforcement that the request is limited to the policy's namespace.
Any authenticated user with permission to create a namespaced Policy can cause Kyverno to perform Kubernetes API requests using Kyverno's admission identity, targeting any API path allowed by that SA's RBAC. This breaks namespace isolation by enabling cross-namespace reads (e.g., ConfigMaps and, where permitted, Secrets) and allows cluster-scoped or cross-namespace writes (e.g., creating ClusterPolicy) by controlling the urlPath through context variable substitution.
Impact
CVSS 10.0 (Critical) — the worst-case vector for an in-cluster vulnerability. Any namespace admin in the cluster can:
- Read Secrets and ConfigMaps in any namespace the kyverno admission SA can read
- Create cluster-scoped resources (
ClusterPolicy,ClusterRoleBindingif available, etc.) by issuing PUT/POST through the kyverno SA - Pivot from a single tenant namespace to cluster-admin equivalence
Variable substitution feeds into URLPath without sanitization, and the resulting path is passed directly to client.RawAbsPath, so the request is unrestricted by Kyverno's own logic.
Detection
Audit Policy resources for context blocks containing apiCall.urlPath references that include variable substitutions resolving outside the policy's own namespace — for example /api/v1/namespaces/{{ request.object.metadata.namespace }}/secrets/... where metadata.namespace is attacker-controlled, or paths like /apis/kyverno.io/v1/clusterpolicies.
Pair with audit-log review for unusual get/list/create/update activity from the kyverno admission controller's SA to namespaces or cluster-scoped resources outside the kyverno namespace's normal scope.
Mitigation
Upgrade Kyverno to v1.16.3 or v1.15.3 (or later on the matching line). Note that this fix was incomplete for the related ConfigMap loader path — see CVE-2026-41068, which targets the same pattern in a different code path and is patched in v1.17.2.
Workarounds until patched:
- Restrict who can create or update namespaced
Policyresources via tight RBAC, especially in shared / multi-tenant clusters. - Audit all existing
apiCallusages and remove anything whereurlPathreferences variables sourced from the request object. - Consider scoping the kyverno admission controller's SA more tightly so that the cluster-wide blast radius is reduced even if a future bypass is found.