CVE-2026-124440: Kyverno Authorization Bypass
Critical CVSS (9.9) reachable over network.
TL;DR - CVE-2026-124440 is a critical Kyverno authorization bypass caused by malformed percent-encoded
apiCall.urlPathvalues. - Kyverno 1.19.1 and earlier versions in the affected release line before 1.19.2 are affected. Upgrade to Kyverno 1.19.2 or later. - No confirmed exploitation or public proof of concept was identified in the reviewed sources, but tenant access to create Kyverno Policies should be treated as high risk. - Review the Kyverno admission-controller ServiceAccount’s RBAC permissions, especially access to secrets, cluster-scoped resources, and admission webhook configuration.
What Is the Root Cause?
The root cause is an authorization-boundary failure in Kyverno’s processing of apiCall.urlPath. Kyverno applies namespace restrictions to API paths so that a namespaced policy cannot intentionally reach another namespace or a cluster-scoped endpoint. Malformed percent escapes can interfere with how that path is validated, clamped, decoded, or interpreted.
The security consequence is a mismatch between the namespace in which the policy is defined and the Kubernetes API path ultimately requested. A crafted policy can cause Kyverno to issue a request outside the policy’s intended scope. This is not merely a data-validation issue; it affects the identity and authorization context used to perform the API request.
The request executes using the Kyverno admission-controller ServiceAccount. That account commonly requires meaningful permissions to evaluate admission policies, although exact permissions vary by installation and enabled features. If its RBAC rules permit access to sensitive resources or admissionregistration APIs, successful exploitation may support data exposure, policy manipulation, or creation of mutating webhooks.
A representative exploitation sequence, based on the available advisory description, is:
- Obtain permission to create a namespaced Kyverno
Policy. - Add an
apiCallusing a malformed percent-encodedurlPath. - Trigger policy evaluation.
- Cause Kyverno to request a cross-namespace or cluster-scoped resource.
- Use returned data or available write permissions to expand control over the cluster.
The supplied research does not provide a complete vulnerable code path, exact malformed payload, or official CVSS vector. Defenders should therefore avoid reproducing an unverified payload in production and use affected-version and behavioral indicators for exposure assessment.
For broader guidance on reducing Kubernetes exposure, see our FAQ on securing SSH access to production servers.
What Happened?
CVE-2026-124440 affects Kyverno’s handling of the apiCall namespace-clamping mechanism. Kyverno allows policies to retrieve data from the Kubernetes API, but namespaced policies are intended to remain within their namespace boundary. A malformed percent-encoded path supplied through apiCall.urlPath can bypass that restriction.
The resulting request is issued by the Kyverno admission-controller ServiceAccount rather than directly by the requesting tenant. If that ServiceAccount has broad Kubernetes RBAC permissions, an attacker with permission to create a namespaced Kyverno Policy may be able to read resources in other namespaces or access cluster-scoped APIs.
The reported impact also includes potential creation of mutating admission webhooks. Depending on deployment permissions, that could provide a path to cluster-wide integrity impact or cluster-admin-level control.
| Field | Value |
|---|---|
| CVE ID | CVE-2026-124440 |
| CVSS | 9.9 critical |
| CVSS vector | Not included in the supplied NVD response; verify the official record before automated scoring |
| Attack vector | Remote through Kubernetes/Kyverno policy functionality; exact CVSS vector is unavailable |
| Authentication or privileges required | A tenant-level capability to create a namespaced Kyverno Policy is implicated; exact CVSS privileges-required value is not available |
| Affected product | Kyverno 1.19.1 through versions before 1.19.2 |
| Fixed version | Kyverno 1.19.2 |
| Patch available | Yes |
| CISA KEV | Not listed in the supplied assessment |
| Confirmed exploitation | None identified in the reviewed sources |
| Public PoC | None identified in the reviewed sources |
The absence of a CISA KEV listing or public exploit does not make this a low-priority issue. The vulnerability crosses a Kubernetes authorization boundary, and the effective permissions are those granted to Kyverno’s admission controller.
Analyst’s Take: Patch Kyverno first, then determine whether policy authors could have reached the vulnerable path. Practical impact depends on the admission-controller ServiceAccount’s RBAC permissions, so exposure review should focus on both policy-creation access and the controller’s ability to read or modify cluster resources.
Who Needs to Act?
Operators running Kyverno 1.19.1 through versions before 1.19.2 need to act. The fixed version identified in the available advisory material is Kyverno 1.19.2.
The most urgent environments are:
- Multi-tenant Kubernetes clusters.
- Development platforms and managed namespaces.
- Clusters where users outside the platform-security team can create Kyverno Policies.
- Installations where the Kyverno admission-controller ServiceAccount can read secrets.
- Environments where the controller can access cluster-scoped resources or modify
MutatingWebhookConfigurationobjects.
Inventory both the controller and policy authors. A cluster may have a vulnerable Kyverno deployment even if only a small number of users have direct Kubernetes administration rights. Delegated permissions may grant policy creation through groups, automation, GitOps repositories, or platform portals.
Use Kubernetes metadata to identify the running Kyverno image and release:
kubectl -n kyverno get deploy \
-o custom-columns=NAME:.metadata.name,IMAGE:.spec.template.spec.containers[*].image
kubectl -n kyverno get pods \
-o custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image
kubectl get crd | grep -i kyverno
The exact image tag format can vary by deployment method. Do not assume that a chart version, image tag, and Kyverno application version are interchangeable. Verify the controller binary version using project release metadata and the deployment manifest.
Why Is the CVSS Score 9.9?
The reported CVSS v3 base score is 9.9, classified as critical. The supplied NVD response did not include a CVSS vector string, so the individual metric selections cannot be stated as authoritative.
The exact values for attack vector, attack complexity, privileges required, user interaction, scope, confidentiality, integrity, and availability should be verified against the official NVD JSON record before being copied into risk systems.
The score is consistent with the described impact. The attacker does not need to compromise the Kyverno controller directly; instead, the flaw is reached through policy functionality available to a tenant with namespace-level policy-creation access. A successful request can cross namespace boundaries and reach cluster-scoped resources, indicating a scope change from the attacker’s namespace permissions to the controller’s broader ServiceAccount permissions.
Potential impact is especially serious where the controller can access sensitive data or modify admission configuration:
- Reading secrets or other privileged resources affects confidentiality.
- Creating or changing mutating admission webhooks can affect integrity across future workloads.
- A durable admission-control mechanism could provide broad control over workloads and policy enforcement.
Availability impact is not explicitly established by the supplied record, so defenders should not infer a specific denial-of-service effect from the 9.9 score alone.
Because the vector is unavailable, organizations should not reverse-engineer a precise metric string from the numeric score. Use the published score for prioritization, preserve uncertainty in internal records, and update the assessment when the authoritative vector is available.
Has CVE-2026-124440 Been Exploited?
No confirmed in-the-wild exploitation was identified in the supplied NVD record or retrieved references. CVE-2026-124440 was also reported as not listed in the CISA Known Exploited Vulnerabilities catalog at the time of assessment.
No public proof-of-concept repository or exploit code was identified in the reviewed sources. The referenced GitHub item is a security advisory, not a proof-of-concept repository. The VulnCheck advisory describes the issue, but the supplied research does not establish active exploitation or provide validated exploit code.
This status should be expressed precisely: exploitation is not confirmed, and a public PoC is not known from the reviewed sources. It does not mean exploitation is impossible or that no private testing has occurred.
Because the vulnerability may be exploitable by a user who can create a namespaced Kyverno Policy, defenders should monitor policy creation and controller-originated API requests rather than waiting for a KEV listing.
Detection Guidance
Begin with exposure validation:
- Identify Kyverno versions.
- Determine which subjects can create namespaced
Policyobjects. - Inspect the admission-controller ServiceAccount’s effective RBAC permissions.
- Review Kubernetes audit logs for unexpected controller-originated requests.
- Inspect policies for unusual
apiCallpaths and percent-encoded sequences.
Pay particular attention to permissions involving:
- Secrets.
- Workload objects.
- Cluster-scoped resources.
mutatingwebhookconfigurations.- Other admission-related objects.
Check Kyverno ServiceAccount Permissions
The ServiceAccount name can differ by chart, namespace, or customization. Obtain the actual identity from the Kyverno Deployment before running authorization checks:
kubectl -n kyverno get deploy \
-o jsonpath='{range .items[*]}{.metadata.name}{" => "}{.spec.template.spec.serviceAccountName}{"\n"}{end}'
Then test its effective permissions:
kubectl auth can-i create policy.kyverno.io \
--as=system:serviceaccount:kyverno:kyverno
kubectl auth can-i --list \
--as=system:serviceaccount:kyverno:kyverno
kubectl get clusterrole,clusterrolebinding,role,rolebinding -A \
-o yaml | grep -n -E \
'kyverno|mutatingwebhookconfigurations|secrets|apiGroups'
Replace the example ServiceAccount identity if the deployment uses a different name.
Inspect Kyverno Policies
Inspect policies for apiCall, urlPath, percent signs, and unusual escape sequences. The following command is a triage aid, not a complete parser:
kubectl get policy.kyverno.io -A -o yaml |
grep -n -E 'apiCall|urlPath|%[0-9A-Fa-f]?[^0-9A-Fa-f]|%[^0-9A-Fa-f]'
A stronger approach is to export policies and parse their YAML structure with a policy-aware script. Look for namespaced policies that use context.apiCall, especially where the path contains:
- Encoded separators.
- Incomplete percent escapes.
- Repeated encoding.
- Path components inconsistent with the policy namespace.
- References to cluster-scoped resources.
Kubernetes Audit Detection
Enable or review Kubernetes audit events for requests made by the Kyverno admission-controller ServiceAccount. Useful signals include:
user.usernamematching the Kyverno admission-controller ServiceAccount.- Requests to namespaces other than the policy’s namespace.
- Requests to cluster-scoped endpoints from policy-triggered activity.
get,list, orwatchoperations against sensitive resources.- Creation or modification of
mutatingwebhookconfigurations. - Activity that begins soon after a new Kyverno
Policyis created.
A generic audit-log search can establish an initial baseline:
jq -r '
select(.user.username? | test("system:serviceaccount:kyverno:")) |
[
.requestReceivedTimestamp,
.user.username,
.verb,
.objectRef.apiGroup,
.objectRef.apiVersion,
.objectRef.resource,
(.objectRef.namespace // "-"),
(.objectRef.name // "-"),
(.responseStatus.code // 0)
] | @tsv
' /var/log/kubernetes/audit/audit.log
For SIEM correlation, alert when a Kyverno ServiceAccount:
- Accesses a namespace outside its expected operating scope.
- Requests a cluster-scoped resource.
- Creates or changes a webhook configuration.
- Reads secrets or other privileged resources unexpectedly.
The exact API-server audit fields and log location vary by Kubernetes distribution. Also note that an API request performed by Kyverno may not preserve the original human actor in the Kubernetes audit user field. Correlate controller activity with recent policy writes, admission events, GitOps commits, and identity-provider logs.
A practical detection pattern is:
user.username starts_with "system:serviceaccount:kyverno:"
AND (
objectRef.resource IN ("mutatingwebhookconfigurations", "validatingwebhookconfigurations")
OR objectRef.namespace NOT IN approved_policy_namespaces
OR objectRef.resource IN ("secrets", "clusterroles", "clusterrolebindings")
)
This is a behavioral detection strategy, not a vendor-supplied network signature. The supplied research does not identify a reliable wire-level signature, and URL encoding may be normalized by clients or API proxies before logging.
Remediation and Patching
Upgrade Kyverno to 1.19.2 or later, which is the fixed version identified in the supplied advisory material. Before changing production, review the project’s release notes and deployment method, then test admission behavior in a staging cluster.
Upgrade the controller and associated components consistently rather than replacing only one image in a multi-component installation.
Helm Deployments
First identify the release and repository configuration:
helm list -A | grep -i kyverno
helm repo list
helm search repo kyverno/kyverno --versions | head
After verifying that the repository and chart version correspond to Kyverno 1.19.2 or later, use the project’s documented Helm upgrade procedure. A typical command pattern is:
helm upgrade kyverno kyverno/kyverno \
--namespace kyverno \
--reuse-values \
--version <chart-version-containing-kyverno-1.19.2-or-later> \
--wait
Replace the placeholder with a verified chart version. The supplied research does not identify a chart-version mapping, so publishing a specific chart number without verification would be unsafe.
Manifest-Based Deployments
For manifest-based deployments, update Kyverno image references to the project’s 1.19.2-or-later release and apply the reviewed manifests:
kubectl apply -f <verified-kyverno-1.19.2-or-later-manifests>
kubectl -n kyverno rollout status deployment
Do not use an unverified URL or image tag in an emergency change. Confirm the deployed image and application version after upgrading:
kubectl -n kyverno get pods \
-o custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image,STATUS:.status.phase
Temporary Mitigations
Until the upgrade is complete, remove or restrict the vulnerable capability. The most effective temporary control is to prevent untrusted subjects from creating or modifying Kyverno Policy objects.
Review RoleBindings and ClusterRoleBindings granting create, update, or patch on policies.kyverno.io, and remove unnecessary grants.
Also reduce the Kyverno admission-controller ServiceAccount’s RBAC permissions to the minimum required for deployed policies and features. This is a compensating control, not a replacement for upgrading. Restricting access to cluster-scoped resources, secrets, and admission webhook configuration can reduce impact, but overly aggressive changes may break policy evaluation or admission enforcement.
Post-Upgrade Investigation
After patching, audit for possible prior exploitation:
kubectl get policy.kyverno.io -A -o yaml > kyverno-policies-after-upgrade.yaml
kubectl get mutatingwebhookconfiguration -o yaml \
> mutating-webhooks-after-upgrade.yaml
kubectl get clusterrole,clusterrolebinding -o yaml \
> cluster-rbac-after-upgrade.yaml
Compare these objects with known-good configuration and investigate:
- Unexpected policy creation or modification.
- Webhook changes.
- Cross-namespace reads.
- Access to secrets or other sensitive objects.
- New or modified cluster RBAC.
- GitOps changes without an approved change record.
- Kyverno controller activity inconsistent with normal admission processing.
If evidence indicates that the admission-controller identity accessed secrets or changed admission configuration, treat the cluster as potentially compromised. Rotate exposed credentials, review workload and control-plane integrity, and follow the organization’s Kubernetes incident-response process.
References
- Kyverno GitHub security advisory: GHSA-39w8-hv5g-f73w
- VulnCheck advisory: Kyverno 1.19.1 privilege escalation via apiCall namespace-clamp bypass
- Kyverno documentation on external data sources and
apiCall - Kyverno 1.10 release material describing Kubernetes API calls
The supplied research reports a CVSS v3 base score of 9.9 but does not include the vector string. It also reports that CVE-2026-124440 was not listed in CISA KEV, with no confirmed in-the-wild exploitation or public PoC identified in the reviewed sources. These status fields should be rechecked against authoritative records before using this article as the sole basis for an automated remediation deadline.
This article may contain affiliate links. We earn a commission on qualifying purchases at no extra cost to you.