Summary
Kyverno's April 2026 SSRF blocklist — which denies outbound requests to 169.254.169.254, 169.254.169.253, metadata.google.internal, 127.0.0.0/8, and ::1/128 — was wired exclusively into the new CEL http.Get/Post library. The legacy apiCall service executor used by every classic ClusterPolicy/Policy context[].apiCall.service call and every GlobalContextEntry external-API call received no equivalent filtering. A ClusterPolicy or GlobalContextEntry author can therefore drive Kyverno to issue requests to the cloud metadata endpoint or any in-cluster service, and Kyverno's projected ServiceAccount token is attached to those requests unconditionally.
Impact
Any principal with permission to create or update ClusterPolicy, Policy, or GlobalContextEntry resources can exploit this vulnerability to reach the cloud instance metadata service at 169.254.169.254, read cloud credentials, and access in-cluster services using Kyverno's network position. Additionally, Kyverno's projected ServiceAccount token is sent to the attacker-chosen host on every such request, constituting a credential egress even where direct exploitation of cloud metadata is not possible. Because URL templating allows a policy to derive the service URL from the admission resource under review, a lower-privileged resource submitter may also trigger the exfiltration depending on how the policy is constructed.
Detection
Audit all ClusterPolicy, Policy, and GlobalContextEntry resources in the cluster for context[].apiCall.service entries with url fields pointing to private or metadata IP ranges (169.254.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). Review Kyverno controller logs for unexpected outbound HTTP requests to these ranges. Any GlobalContextEntry resource whose apiCall.service.url is not the in-cluster Kubernetes API server should be treated as suspicious on unpatched versions.
Mitigation
Upgrade to Kyverno 1.19.1, which applies the SSRF host/CIDR blocklist and ServiceAccount token destination check to the legacy apiCall service executor and the GlobalContextEntry external-API path, matching the controls already in place for the CEL http.Get/Post path. Prior to upgrading, restrict ClusterPolicy, Policy, and GlobalContextEntry create/update permissions to trusted administrators using RBAC, and review existing resources for suspicious service.url values.