Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain policy-author or resource-submit access
-
DeliveryCraft apiCall.service URL to metadata/internal host
-
ExploitKyverno legacy executor issues unfiltered request
-
ExecutionRead cloud credentials and reach in-cluster endpoints
-
ImpactEscalate using harvested credentials/token
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the ability to author a Kyverno ClusterPolicy or GlobalContextEntry that uses a non-CEL context[].apiCall.service call (the legacy apiCall service executor path), which is a cluster-privileged operation (PR:H). The egress blocklist and scoped-token control were only wired into the new CEL http.Get/Post library, so any policy using the legacy service executor or the GlobalContextEntry external-API path is affected on versions before 1.19.1. A limiting factor: in the default case the attacker must already hold policy-authoring privileges. The privilege bar drops to a lower-privileged resource submitter ONLY when a deployed policy templates the service URL from the admission resource - a non-default, deployment-specific configuration. The stolen ServiceAccount token is audience-scoped, limiting its replay value. |
| Impact | The vendor CVSS 4.0 score of 8.3 (High) reflects a network-exploitable (AV:N), low-complexity (AC:L), no-user-interaction SSRF with high confidentiality impact on both the vulnerable system (VC:H) and subsequent systems (SC:H) via cloud metadata credential theft. Crucially, the vector requires high privileges (PR:H), consistent with the description: the primary attacker is a ClusterPolicy or GlobalContextEntry author, who is inherently a trusted, cluster-privileged actor. This substantially lowers real-world risk versus an unauthenticated flaw. The description does note a lower-privilege escalation path - where a deployed policy templates the service URL from the admission resource, an ordinary resource submitter could trigger it - but this is deployment-dependent, not the default. No EPSS score, no CISA KEV listing, and no public POC were provided, so this is 'no public exploit identified at time of analysis' - a real but not urgently-exploited issue. The token-theft angle is partially mitigated: the exfiltrated projected ServiceAccount token is audience-scoped, limiting replay. Net: a legitimately serious SSRF-to-metadata-credential issue in a widely used Kubernetes tool, but gated behind privileged policy authorship in the default case, making it a patch-promptly rather than drop-everything priority. |
| Exploit ScenarioDerived | A user with rights to author a Kyverno ClusterPolicy or GlobalContextEntry defines a non-CEL context[].apiCall.service call pointing at the cloud metadata endpoint (e.g. 169.254.169.254 or metadata.google.internal). Kyverno's legacy executor issues the GET/POST with no egress filtering, returning cloud instance credentials to the policy context, and even attaches Kyverno's projected ServiceAccount token to the attacker-chosen host. In deployments where a policy templates the service URL from the admission resource, a lower-privileged resource submitter can trigger the same request path. No public POC is currently identified. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
Server-side request forgery in Kyverno before 1.19.1 lets a user who can author a ClusterPolicy or GlobalContextEntry with a non-CEL context[].apiCall.service call force the admission controller to issue GET/POST requests to an arbitrary destination, including cloud metadata endpoints, loopback, and any in-cluster service, thereby reading cloud instance credentials and reaching internal endpoints from Kyverno's network position. The vulnerable legacy executor and the GlobalContextEntry external-API path use a plain net/http client with no egress blocklist and no validation of the configured service URL, and they unconditionally attach Kyverno's projected ServiceAccount token to the attacker-chosen destination (the token is audience-scoped, limiting replay value). Exploitation requires high privileges because the attacker must already be able to write cluster-scoped policy objects (PR:H); the bar drops to a lower-privileged resource submitter only in the non-default case where a deployed policy templates the service URL from the admission resource. There is no public exploit identified at time of analysis, and the vendor rates the issue 8.3 (High) under CVSS 4.0.
RemediationAI
Upgrade Kyverno to 1.19.1, the vendor-released fixed version, which wires the default egress blocklist and scoped-token control into the legacy apiCall service executor and the GlobalContextEntry external-API path in addition to the CEL http.Get/Post library (advisory: https://github.com/kyverno/kyverno/security/advisories/GHSA-q825-p383-r9v5). If immediate upgrade is not possible, the most effective compensating control is RBAC hardening: restrict create/update rights on ClusterPolicy and GlobalContextEntry to the smallest possible set of trusted administrators, since exploiting the default configuration already requires policy-authoring privileges; this does not help when a deployed policy templates the service URL from the admission resource, so audit existing policies for url fields built from resource data and remove or constrain those templates (side effect: legitimate dynamic-URL policies must be rewritten or disabled). Enforce Kubernetes NetworkPolicy egress rules on the Kyverno namespace to block the link-local metadata IPs, loopback, and unneeded internal services (side effect: must allowlist every legitimate external API Kyverno actually calls or admission webhook traffic breaks). On cloud hosts, prefer IMDSv2-only or metadata access restrictions so a forged request cannot retrieve credentials even if SSRF succeeds, and treat Kyverno's projected ServiceAccount token as potentially exposed, relying on its audience scoping while rotating or narrowing it where feasible. Note that the vendor has not published a patch version other than 1.19.1, and no public exploit code was identified at time of analysis, so these controls are precautionary rather than a response to observed attacks.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Kyverno is a Kubernetes-native policy engine whose validation, mutation, and generation rules can call external services through context entries. The affected code is the legacy apiCall service executor in pkg/engine/apicall/executor.go and the GlobalContextEntry external-API path, which together handle every non-CEL context[].apiCall.service invocation. Those paths construct requests with a plain net/http client and perform neither of the protections that were added for the newer CEL http.Get/Post library: the default egress blocklist (169.254.169.254, 169.254.169.253, metadata.google.internal, 127.0.0.0/8, ::1/128) and the scoped-token control. Because the configured service URL is also not validated, any host the attacker supplies is reachable, which is the classic CWE-918 server-side request forgery pattern: the server becomes a confused deputy that converts a data-only policy object into a network request originating from the Kyverno pod. The unconditional attachment of Kyverno's projected ServiceAccount token to that attacker-chosen destination compounds confidentiality impact, though the audience scoping of the projected token constrains what the stolen credential can be replayed against. The affected CPE is cpe:2.3:a:kyverno:kyverno:*:*:*:*:*:*:*:* and the EUVD record lists affected versions as kyverno 0 through <1.19.1.
Know when Kyverno gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N
Network-reachable admission/policy API with low complexity; PR:H because default exploitation needs policy-author rights; S:C and C:H for metadata credential theft crossing into cloud/internal systems, I:L for arbitrary GET/POST.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Kyverno before 1.19.1 is vulnerable to server-side request forgery. The default egress blocklist (169.254.169.254, 169.254.169.253, metadata.google.internal, 127.0.0.0/8, ::1/128) and the scoped-token control were wired only into the new CEL http.Get/Post library and were never applied to the legacy apiCall service executor (pkg/engine/apicall/executor.go) or to the GlobalContextEntry external-API path, which handle every non-CEL context[].apiCall.service call. Because these paths use a plain net/http client with no egress filtering and no validation of the configured service URL, a ClusterPolicy or GlobalContextEntry author - or, where a deployed policy templates the service URL from the admission resource, a lower-privileged resource submitter - can cause Kyverno to issue GET/POST requests to an arbitrary host, including the cloud metadata endpoint, loopback, and any in-cluster service, reading cloud instance credentials and reaching internal endpoints with Kyverno's network position. The executor also unconditionally attaches Kyverno's projected ServiceAccount token to the attacker-chosen destination; the token is audience-scoped, limiting its replay value. Fixed in 1.19.1.
Articles & Coverage 1
Technical POC Analysis
CWE-918 (SSRF); the advisory also tags CWE-200 and CWE-522.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Kyverno versions before 1.19.1 contain a server-side request forgery flaw in the admission controller that can be triggered by users with permission to create cluster-scoped policy objects. This could allow an attacker to force Kyverno to access cloud metadata endpoints and internal services, potentially exposing cloud instance credentials and enabling lateral movement. Security leadership should prioritize patching because Kyverno often runs with elevated privileges in Kubernetes environments.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Kyverno Kubernetes policy engine prior to 1.x has a privilege escalation vulnerability (CVSS 9.9) allowing policy bypass
Cross-namespace privilege escalation in Kyverno 1.18.0-1.18.1 lets any tenant who can create a NamespacedMutatingPolicy
Kyverno is a policy engine designed for Kubernetes. Rated high severity (CVSS 8.7), this vulnerability is remotely explo
Kyverno is a policy engine designed for cloud native platform engineering teams. Rated high severity (CVSS 8.5), this vu
Kyverno versions up to 1.16.3 is affected by allocation of resources without limits or throttling (CVSS 7.7).
Kyverno is a policy engine designed for cloud native platform engineering teams. Rated medium severity (CVSS 5.8), this
Kyverno versions 1.16.0 and later contain a server-side request forgery vulnerability in unrestricted CEL HTTP functions
Privilege escalation in Kyverno before 1.19.1 allows an authenticated Kubernetes namespace tenant with Policy/apiCall au
Policy enforcement bypass in Kyverno v1.9.0 through v1.12.7 lets an authenticated Kubernetes user evade an enforce-mode
Kyverno is a policy engine designed for Kubernetes. Rated high severity (CVSS 8.8), this vulnerability is remotely explo
Cross-namespace information disclosure in Kyverno before 1.19.1 allows an authenticated low-privilege tenant to read res
Credential leakage in Kyverno's apiCall service mode automatically forwards the Kubernetes admission controller's Servic
EUVD-2026-87678
GHSA-8x9j-8h3w-5cxq
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB