Kyverno 1.19.2 Security Release: 26 Advisories Fixed

23 October 2026

Kyverno 1.19.2 Security Release: 26 Advisories Fixed

Kyverno 1.19.2 fixes 26 security advisories: 11 critical, 14 high and 1 moderate. The worst let a tenant who can create a namespaced policy act across the cluster with Kyverno’s ServiceAccount, up to cluster admin. Others bypass image verification. Upgrade to 1.19.2 (Helm chart 3.9.2); 1.18 is no longer supported in the community.

At a glance

Release Kyverno v1.19.2, Helm chart 3.9.2, released October 20, 2026
Advisories 26: 11 critical, 14 high, 1 moderate (24 listed in the release notes, 2 published on October 23)
Most serious Namespaced policies reaching other namespaces or cluster-scoped objects through apiCall, resource.get(), CleanupPolicy context, and mutate-existing targets
Affected Ranges vary by advisory. Some reach back to 1.11; others apply only to 1.18 or 1.19. Exact ranges are in the table at the end.
Fixed 1.19.2 only. No 1.18.x or 1.17.x patch has been published.
CVE IDs Requested for all 26 and not yet assigned as of October 23. Track them by GHSA ID until then.

Who is affected?

Almost every Kyverno install is affected, but how exposed you are depends on who can do what in the cluster.

The 11 critical findings mostly assume a tenant who can create namespaced Kyverno policies: Policy, CleanupPolicy, NamespacedMutatingPolicy, NamespacedValidatingPolicy and their relatives. Platforms that hand namespaces to teams and let them write their own policies are the exposed case. That is the multi-tenant setup the namespaced policy types exist for.

A second group needs much less. Forging the annotation that carries image verification results, spoofing Kyverno’s internal generate labels, and crashing the policy engine with a crafted resource all need only the right to create a resource. The image verification flaws can be triggered by whoever controls an image’s tags, signatures or attestations.

The patched version is the same everywhere: 1.19.2. Two advisories name 1.11 as the earliest affected release, and none has a backport to an older minor line. The Kyverno community patch policy supports only the current minor release, 1.19.

What did Kyverno 1.19.2 fix?

The release notes group the 26 advisories into eight areas. The table below follows the same grouping, with the two late advisories added.

Area Advisories Severity What could happen
API path validation and namespace confinement 6 Critical A namespaced Policy or CleanupPolicy sends API requests as the admission or cleanup controller, outside its namespace
NamespacedMutatingPolicy target confinement 3 Critical, high A tenant’s mutate-existing policy writes resources in other namespaces with the background controller’s ServiceAccount
Image verification and attestation 6 Critical, high Unsigned images pass verification, or crafted signatures exhaust controller memory
Generate authorization and labels 4 Critical, high Kyverno generates or clones resources the policy author isn’t allowed to touch
Wildcards, variable substitution and panics 4 High One resource or policy hangs or crashes the shared admission webhook
PolicyException in generated admission policies 1 High Exceptions bypass their usual gates when Kyverno generates ValidatingAdmissionPolicies
CEL evaluation cost 1 Moderate A tenant’s CEL expression exhausts webhook CPU and memory
Project CI workflow 1 Critical Script injection in the project’s cherry-pick workflow; no runtime impact

Namespace confinement

Namespaced policies only make sense if they stay inside their namespace. Eight of the critical findings break that, and a ninth (GHSA-vjfx-fp68-rh4v) does it through generate rules. One example: a namespaced Policy’s apiCall.urlPath could hide .. segments behind a query string (GHSA-3xfv-vq8x-qhg4). A tenant’s CEL policy could put a path traversal in the resource argument of resource.get() (GHSA-4pqm-wqq6-h9q2). In each case the request ran with Kyverno’s own ServiceAccount, which can read across namespaces and, in the worst cases, create cluster-scoped admission webhooks. From there the path to cluster admin is short.

GHSA-39w8-hv5g-f73w deserves its own note. Version 1.19.1 added a namespace check to apiCall to close two earlier advisories. That check read a decoded copy of the path but sent the raw one, and a malformed percent-escape such as ?a=% made the two disagree. If you upgraded to 1.19.1 in September for those fixes, the hole was still open.

Image verification

Six advisories cover verifyImages and notary. In the most serious (GHSA-2r43-6962-xcw5), results were cached by tag rather than digest, so moving a tag after one good check could get an unverified image admitted. Another skipped the cosign subject check when the signing certificate had no Subject Alternative Name (GHSA-fcfr-fr8g-qjqv). A third let a user forge the annotation that records a successful verification (GHSA-h3pm-q9ww-f439). If you rely on Kyverno to keep unsigned images out, treat this group as critical whatever the label says.

Generate, exceptions and denial of service

Generate rules had two authorization gaps. The admission check asked whether Kyverno could create the target, not whether the policy author could (GHSA-q62c-r9v2-cf64). It also skipped the check entirely when the target kind was a variable (GHSA-vjfx-fp68-rh4v). Separately, when Kyverno generated ValidatingAdmissionPolicies from its own policies, it folded in PolicyExceptions without checking the usual exception settings (GHSA-qc9c-3fgf-cgq8). The remaining fixes bound wildcard matching, variable substitution and CEL cost, and stop panics. Each of those could take down the shared admission webhook. A crash is worse than an outage when the webhook runs with failurePolicy: Ignore, because requests are then admitted without policy checks.

How do I check my clusters?

  1. Find the version that is actually running. The image tag is what counts, not the chart you think you installed.
    kubectl get pods -n kyverno -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'
  2. List the namespaced policies that exist, and note who created them.
    kubectl get policies.kyverno.io,cleanuppolicies.kyverno.io -A
    kubectl get namespacedmutatingpolicies,namespacedvalidatingpolicies,namespacedgeneratingpolicies,namespaceddeletingpolicies,namespacedimagevalidatingpolicies -A
  3. Check which users and service accounts can create them. Repeat for each tenant identity and for the other namespaced kinds.
    kubectl auth can-i create policies.kyverno.io -n team-a --as=system:serviceaccount:team-a:deployer
    kubectl auth can-i create cleanuppolicies.kyverno.io -n team-a --as=system:serviceaccount:team-a:deployer
  4. Check the webhook failure policy. Ignore turns any of the crash bugs into a policy bypass.
    kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations -o custom-columns=NAME:.metadata.name,POLICY:.webhooks[*].failurePolicy | grep -iE 'NAME|kyverno'

What if I can’t upgrade today?

The only full fix is 1.19.2. Until you can get there, these steps shrink the blast radius:

  • Remove create and update rights on every namespaced Kyverno policy kind from tenant roles. Treat them as cluster-admin-adjacent permissions until you are on 1.19.2.
  • Review existing namespaced policies for apiCall entries, resource.get() or resource.post() calls, and mutate-existing or generate targets whose namespace or kind comes from a variable.
  • Pin images by digest in workloads that depend on image verification, so the tag-caching bypass has nothing to move.
  • Watch kube-system and other sensitive namespaces for new RoleBindings, webhook configurations and NetworkPolicies you didn’t create.

How do I upgrade to Kyverno 1.19.2?

For Helm installs, chart 3.9.2 ships Kyverno v1.19.2:

helm repo update helm upgrade kyverno kyverno/kyverno -n kyverno --version 3.9.2

If you are on 1.18 or older, this is a minor-version upgrade. Read the 1.19.0 release notes and test your policies against 1.19 first. For upgrade planning, see the Kyverno Operators Playbook.

For Kyverno managed through Nirmata, use the add-on upgrade option in the console.

For Nirmata Enterprise for Kyverno customers, Nirmata will be providing patched images for the Enterprise releases they are running currently as per the Enterprise SLA. Please reach out to us at customer-success@nirmata.com for specific release information.

Nirmata engineers wrote several of these fixes, and some began in Nirmata Enterprise for Kyverno before being contributed back to open source. Nirmata Enterprise for Kyverno provides hardened builds and backports security fixes to older minor releases, for teams that can’t move to the newest minor every time a fix lands.

All 26 advisories

CVE IDs have been requested for these advisories and will be added to each one when they are assigned. Affected ranges are copied from each GitHub advisory. Where an advisory gives no CVSS score, the column shows a dash. Some ranges stop before 1.19.1, but every advisory lists 1.19.2 as its only patched release, so read the advisory itself before deciding a row doesn’t apply to you.

Advisory Severity CVSS Affected Summary
GHSA-39w8-hv5g-f73w Critical 9.9 1.19.1 Malformed percent-escape bypasses the 1.19.1 apiCall namespace check
GHSA-vjfx-fp68-rh4v Critical – 1.19.0 Generate authorization skipped when the target kind or namespace is a variable
GHSA-3xfv-vq8x-qhg4 Critical 9.9 ≤ 1.19.1 apiCall urlPath traversal to cluster admin (incomplete fix of GHSA-5qq8)
GHSA-pcx2-xcq4-65vf Critical – All Namespace in an apiCall query string bypasses isolation
GHSA-4pqm-wqq6-h9q2 Critical 9.9 ≤ 1.19.0 Path traversal in resource.get() and resource.post()
GHSA-p58h-r4j3-h5vx Critical 9.9 1.17.0–1.19.1 Namespaced CleanupPolicy context entries are unconfined
GHSA-rcxg-3f92-3mgr Critical 9.9 ≤ 1.18.2 CleanupPolicy API calls send arbitrary POST requests
GHSA-jcw5-3wcg-fqx5 Critical 9.9 ≥ 1.18.0 Mutate-existing target expression overwrites resources in other namespaces
GHSA-f96w-622v-rqpq Critical 9.9 ≤ 1.19.0 Mutate-existing CEL target writes to another tenant’s namespace
GHSA-2r43-6962-xcw5 Critical 9.1 1.18.0–1.19.1 Image verification cache keyed by tag, not digest
GHSA-5gq8-3xxc-jm92 Critical 9.1 All Script injection in the project’s cherry-pick workflow
GHSA-vm98-8c25-h274 High 8.5 ≤ 1.18.2 Mutate-existing writes Namespaces and other namespaces’ resources
GHSA-hg5v-hwm3-956r High 8.5 ≤ 1.19.1 Spoofed generate labels trigger unauthorized generation
GHSA-q62c-r9v2-cf64 High – main before the fix Generate permission check tests the controller, not the author
GHSA-493q-9xvg-9xf3 High – ≤ 1.18.1 Generate clone reads from any namespace
GHSA-h3pm-q9ww-f439 High 7.7 ≤ 1.19.1 Forged annotation bypasses ClusterPolicy image verification
GHSA-fcfr-fr8g-qjqv High 7.7 ≤ 1.19.1 Cosign subject check skipped when the certificate has no SAN
GHSA-24cc-9745-hxfc High – < 1.18.2 Attestation parsing panic bypasses verification
GHSA-3f2c-hfj8-542w High 7.5 1.11.0–1.16.2 Unbounded decompression of notary attestations
GHSA-fr24-3hvf-393q High 7.5 1.11.0–1.16.2 Unbounded decompression of notary signatures
GHSA-qc9c-3fgf-cgq8 High 7.7 ≤ 1.19.1 Generated ValidatingAdmissionPolicies ignore PolicyException gates
GHSA-338x-hgrv-626h High 7.7 ≤ 1.19.1 Nested variable substitution loops forever (CVE-2025-47281 bypass)
GHSA-8mrj-27wr-599g High 7.7 ≤ 1.19.1 Exponential-time wildcard matching
GHSA-x4xq-p8g4-6fwg High – < 1.18.2 Panic in variable substitution on a non-string field
GHSA-r2p2-3892-5jjf High – 1.18.1 Panic in the In and NotIn operators
GHSA-m8p2-qqmx-j53x Moderate 6.2 ≤ 1.19.1 No cost limit on CEL policy expressions

Frequently asked questions

Do these advisories affect me if only cluster admins write Kyverno policies?

Your exposure is lower, but not zero. The namespace-escape findings need someone who can create a namespaced policy, so a cluster where only admins write policies avoids most of them. The image verification bypasses, the forged generate labels, and the crashes caused by crafted resources need only the ability to submit a resource or publish an image. Every Kyverno cluster should upgrade.

Is there a Kyverno 1.18 patch release with these fixes?

No. The Kyverno community patch policy supports only the current minor release, which is 1.19, for about three months. Clusters on Kyverno OSS 1.18 or older need to move to 1.19.2, or apply other mitigations. Secure distributions like Nirmata Enterprise for Kyverno offer long term support and other benefits.

Why do the advisory counts differ between sources?

The v1.19.2 release notes list 24 advisories. Two more, GHSA-39w8-hv5g-f73w and GHSA-vjfx-fp68-rh4v, were published on October 23, two days after the others. Both are critical and both are fixed in 1.19.2, so there is nothing extra to install. Expect the total to change again if more findings are disclosed against 1.19.1.

What does GHSA-5gq8-3xxc-jm92 mean for people running Kyverno?

Nothing to change in your clusters. It is a script-injection flaw in the Kyverno project’s own GitHub cherry-pick workflow, which could have exposed repository credentials. The fix hardens the project’s CI. It counts toward the 26 advisories and is rated critical, but it doesn’t affect a running Kyverno install.

Kyverno Runs Your Admission Control. Is It Actually Hardened?

Latest

From the blog

The latest industry news, interviews, technologies, and resources.

View all blogs
OpenShell on Kubernetes: A Guide for Platform Engineers
OpenShell on Kubernetes: A Guide for Platform Engineers

What OpenShell is AI agents do more than call APIs. They run shells, install packages, read files, and open network…

Governance Beyond the Admission Webhook
Governance Beyond the Admission Webhook

Nirmata at KubeCon + CloudNativeCon North America 2026