CVE-2026-41485: Denial of Service in Kyverno via Unchecked Type Assertion in Mutation Engine
Vulnerability ID: CVE-2026-41485
CVSS Score: 7.7
Published: 2026-04-24
Kyverno policy engine versions prior to 1.16.4 and 1.17.0-rc1 through 1.17.1 are vulnerable to a Denial of Service. An unchecked Go type assertion in the legacy mutation engine triggers a runtime panic when processing missing JMESPath variables.
TL;DR
A Go type assertion panic in Kyverno's mutation engine allows authenticated users to crash the background and admission controllers, leading to a persistent DoS.
⚠️ Exploit Status: POC
Technical Details
- CWE ID: CWE-617
- Attack Vector: Network
- CVSS Score: 7.7
- EPSS Score: 0.00037
- Impact: High (Denial of Service)
- Exploit Status: PoC Available
- Privileges Required: Low (Policy RBAC)
Affected Systems
- Kyverno Legacy Mutation Engine
- Kyverno Background Controller
- Kyverno Admission Webhook
-
Kyverno: < 1.16.4 (Fixed in:
1.16.4) -
Kyverno: >= 1.17.0-rc1, <= 1.17.1 (Fixed in:
1.17.2)
Code Analysis
Commit: 76c8fdb
Fix: Handle missing jmespath variables in patchesJson6902 to prevent panic
- patcher := NewPatcher(fe["patchStrategicMerge"], fe["patchesJson6902"].(string))
+ jsonPatch, _ := fe["patchesJson6902"].(string)
+ patcher := NewPatcher(fe["patchStrategicMerge"], jsonPatch)
Exploit Details
- GitHub Security Advisory: Proof of concept policies provided in the official GitHub Security Advisory.
Mitigation Strategies
- Upgrade Kyverno to a non-vulnerable version (1.16.4 or 1.17.2).
- Restrict RBAC permissions for creating or updating Policy and ClusterPolicy objects.
- Implement JMESPath default values (e.g.,
{{ element.field || '' }}) in all policy rules. - Migrate policies to the CEL-based engine to bypass legacy mutation vulnerabilities.
Remediation Steps:
- Identify the current Kyverno version deployed in the cluster.
- Review and audit existing RoleBindings and ClusterRoleBindings that grant policy manipulation rights.
- Apply the Kyverno helm chart or manifest upgrade to version 1.16.4 or >= 1.17.2.
- Clear any pending or poisoned UpdateRequest objects from the cluster if the background controller remains in CrashLoopBackOff post-upgrade.
References
Read the full report for CVE-2026-41485 on our website for more details including interactive diagrams and full exploit analysis.
Top comments (0)