Skip to main content
HIGH7.7GHSA-fmqp-4wfc-w3v7
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
Affected projects
kyverno
Disclosed
Last updated

Affected versions

ProjectVulnerable range
kyverno< 1.16.2

Patched versions

ProjectFixed in
kyverno1.16.2

References

Summary

Kyverno's APICall feature allows policies to fetch external data via HTTP requests, but the implementation does not validate the target URL before executing the request. This creates a Server-Side Request Forgery (SSRF) vulnerability that any user with Policy creation permissions can exploit. Because Kyverno executes all APICall requests using a cluster-wide high-privilege ServiceAccount, a low-privilege tenant can direct Kyverno to access resources across tenant boundaries — a classic Confused Deputy problem. Sensitive data retrieved by Kyverno, such as Secrets from other namespaces or cloud IAM credentials from a metadata service, can be surfaced to the attacker via PolicyReport resources.

Impact

Users with only namespace-level Policy creation permissions can exploit this vulnerability to access internal Kubernetes resources across tenant boundaries, retrieve cloud platform IAM credentials from link-local metadata endpoints (such as the AWS IMDS at 169.254.169.254), and read Secrets belonging to other namespaces. This completely breaks tenant isolation in multi-tenant Kubernetes environments. The vulnerability does not require cluster-admin privileges. Exfiltrated data is returned to the attacker through PolicyReport resources that Kyverno writes as part of normal policy evaluation.

Detection

Review all Policy and ClusterPolicy resources in the cluster for apiCall.service.url fields referencing IP addresses, link-local ranges (169.254.x.x), loopback addresses, or unexpectedly internal services. Audit PolicyReport and ClusterPolicyReport resources for response content that does not originate from trusted external services. In multi-tenant environments, pay particular attention to PolicyReports created by low-privilege namespaces that contain data from other namespaces or cloud metadata endpoints.

Mitigation

Upgrade Kyverno to 1.16.2 or later, which adds URL validation to the apiCall HTTP execution path. Mitigate the risk on unpatched versions by restricting Policy creation permissions (kyverno.io/v1 Policy and ClusterPolicy resources) so that only trusted administrators can create policies with apiCall.service.url references. Implement network egress controls on the Kyverno controller pods to restrict outbound connections to an approved allowlist of endpoints, preventing requests to internal metadata services and cross-tenant Kubernetes services. In multi-tenant clusters, treat any tenant's ability to create Kyverno policies with apiCall.service.url as cluster-wide access until Kyverno 1.16.2 or later is deployed.

References