CVE-2026-23881
Wolfi vulnerability analysis and mitigation

Overview

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).

Technical details

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).

Impact

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).

Exploitability

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.

Exploitation steps

  1. Obtain policy creation privileges: Gain access to a Kubernetes cluster where Kyverno is deployed and acquire RBAC permissions to create Policy or ClusterPolicy resources in at least one namespace.
  2. Create a target namespace: Run kubectl create namespace poc-test to establish a namespace for the malicious policy.
  3. Craft the amplification policy: Create a Kyverno 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.
  4. Apply the malicious policy: Run 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.
  5. Trigger admission controller crash: Run 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).

Indicators of compromise

  • Kubernetes Events/Pod Status: Kyverno pods (kyverno-admission-controller-*, kyverno-reports-controller-*) in the kyverno namespace showing OOMKilled status or repeated CrashLoopBackOff restarts (kubectl get pods -n kyverno).
  • Logs: Absence of crash-reason logs from the admission controller or reports controller at time of OOMKill (the crash produces no application-level error logs explaining the cause).
  • Policy Artifacts: Presence of a 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.
  • Webhook Errors: Kubernetes API server logs or client errors showing failed calling webhook "validate.kyverno.svc-fail" with EOF responses, indicating the admission controller crashed mid-request (Github Advisory).

Mitigation and workarounds

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.

Community reactions

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.

Additional resources


SourceThis report was generated using AI

Related Wolfi vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-86143MEDIUM6.9
  • Wolfi logoWolfi
  • python3-libxml2
NoYesSep 05, 2026
CVE-2026-86142MEDIUM6.9
  • Wolfi logoWolfi
  • seal-libxml2
NoYesSep 05, 2026
CVE-2026-86144MEDIUM5.6
  • Wolfi logoWolfi
  • libxml2-static
NoYesSep 05, 2026
CVE-2026-86141LOW2.9
  • Wolfi logoWolfi
  • libxml2
NoYesSep 05, 2026
CVE-2026-84445HIGHN/A
  • Nomad logoNomad
  • terraform-docs
NoYesSep 08, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management