
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-23881 is a Denial of Service vulnerability in Kyverno's policy engine caused by unbounded memory consumption through context variable amplification. Authenticated users with policy creation privileges can craft malicious policies that exponentially amplify string data via JMESPath context variables, exhausting cluster memory. Affected versions are all releases prior to 1.15.3 and versions 1.16.0 through 1.16.2; versions 1.15.3 and 1.16.3 contain the fix. The vulnerability was published on January 27, 2026, with a CVSS v3.1 score of 7.7 (High) (Github Advisory).
The root cause is CWE-770 (Allocation of Resources Without Limits or Throttling): Kyverno's policy engine context evaluation imposes no cumulative size limit on context variables during policy evaluation. An attacker exploits this by chaining JMESPath functions — specifically random() to generate an initial string and join() to repeatedly double it — across 19 context variable definitions, growing from 1KB to ~256MB in a single policy evaluation. The attack vector is network-based and requires only low privileges (policy creation rights), with no user interaction needed. A full proof-of-concept policy was published in the security advisory, demonstrating the attack on Kyverno v1.16.1 running on Kubernetes v1.34.0 (Github Advisory).
Successful exploitation causes the Kyverno admission controller and reports controller pods to be OOMKilled, entering a crash loop with no diagnostic logs explaining the crash. With policy enforcement disabled, cluster-wide security policies stop being evaluated; if failurePolicy: Ignore is configured, workloads bypass all Kyverno validation during the outage, and applications depending on Kyverno mutations may deploy with incorrect configurations. The scope is changed (S:C) because the impact extends beyond the Kyverno process itself to the broader Kubernetes cluster's security posture (Github Advisory).
A detailed proof-of-concept policy YAML was publicly disclosed as part of the GitHub Security Advisory at the time of disclosure on January 27, 2026, making exploitation straightforward for any user with policy creation privileges (Github Advisory). There is no evidence of in-the-wild exploitation or threat actor attribution at this time. The EPSS score is approximately 0.037–0.104%, indicating low but non-negligible exploitation probability. The vulnerability is not listed in the CISA KEV catalog.
Policy or ClusterPolicy resources in at least one namespace.kubectl create namespace poc-test to establish a namespace for the malicious policy.Policy manifest that uses the random('[a-zA-Z0-9]{1000}') JMESPath function to generate a 1KB string as context variable l0, then chains 18 join('', [lN, lN]) expressions to double the string at each step, reaching ~256MB at l18.kubectl apply -f malicious-policy.yaml — this immediately triggers the reports controller to evaluate the policy, causing it to be OOMKilled and enter a crash loop.kubectl create configmap trigger -n poc-test --from-literal=key=value to force the admission controller to evaluate the policy, causing it to allocate ~256MB and crash with an OOMKill, disabling cluster-wide policy enforcement (Github Advisory).kyverno-admission-controller-*, kyverno-reports-controller-*) in the kyverno namespace showing OOMKilled status or repeated CrashLoopBackOff restarts (kubectl get pods -n kyverno).Policy or ClusterPolicy resource containing deeply chained JMESPath join() context variable definitions (e.g., 10+ sequential join('', [lN, lN]) expressions) applied by a non-admin user.failed calling webhook "validate.kyverno.svc-fail" with EOF responses, indicating the admission controller crashed mid-request (Github Advisory).Upgrade Kyverno to version 1.15.3 or 1.16.3, which introduce a global context size limit (default: 2MB) tracked cumulatively across all context variable additions during policy evaluation (Github Advisory, Patch Commit). The maxContextSize configuration parameter (set in the Kyverno ConfigMap) can be tuned using Kubernetes quantity format (e.g., 100Mi, 2Gi); setting it to 0 disables the limit and is not recommended for production. As an immediate workaround prior to patching, restrict Policy and ClusterPolicy creation RBAC permissions to trusted administrators only to limit the attack surface.
The vulnerability was reported by security researcher thevilledev and credited in the GitHub Security Advisory published by the Kyverno maintainers on January 27, 2026 (Github Advisory). Red Hat acknowledged the vulnerability and published a CVE entry on January 28, 2026. The disclosure received coverage from security news aggregators including The Hacker Wire and security blogs, with social media posts on Mastodon and Bluesky noting the cluster-wide security impact of Kyverno policy enforcement being disabled during an attack.
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."