CVE-2026-44245 Overview
CVE-2026-44245 is a Cross-Site Scripting (XSS) vulnerability [CWE-79] in Kyverno, a policy engine used by cloud native platform engineering teams. The flaw affects versions prior to 2.5.2 and resides in the PropertyCard.vue component of the policy reporter UI. The component uses Vue 3's v-html directive in the else branch of a URL check, allowing non-URL string values to flow directly into the Document Object Model (DOM) as HTML. Attackers with write access to Kubernetes PolicyReport objects can inject arbitrary HTML and JavaScript through the .results[].properties fields.
Critical Impact
Authenticated attackers with PolicyReport write access can inject HTML or JavaScript that executes in the browser of any user viewing the policy reporter UI.
Affected Products
- Kyverno policy engine versions prior to 2.5.2
- Kyverno policy reporter UI (PropertyCard.vue component)
- Kubernetes clusters exposing PolicyReport objects through the affected UI
Discovery Timeline
- 2026-05-12 - CVE-2026-44245 published to the National Vulnerability Database (NVD)
- 2026-05-13 - Last updated in NVD database
Technical Details for CVE-2026-44245
Vulnerability Analysis
The vulnerability is a stored Cross-Site Scripting flaw rooted in unsafe template rendering. Vue 3's v-html directive injects raw HTML into the DOM and intentionally disables the auto-escaping that the standard {{ }} interpolation syntax provides. Any string rendered through v-html is treated as trusted markup. When attacker-controlled data flows into this directive without sanitization, the browser parses and executes embedded scripts.
The attack vector is network-based and requires user interaction, namely a victim loading a policy report view in the UI. Successful exploitation runs script in the victim's browser session, enabling session theft, UI defacement, or pivoting to other authenticated cluster endpoints accessible from the browser.
Root Cause
The PropertyCard.vue component implements an isURL() guard that only matches strings parseable as http: or https: URLs. Values passing the guard render as anchor elements. Values failing the guard fall through to the else branch, where v-html renders them as raw HTML. Any payload that does not begin with http: or https: bypasses the guard entirely and reaches the unsafe sink.
Attack Vector
The vulnerable data originates from Kubernetes PolicyReport.results[].properties fields. These are arbitrary string maps populated by policy engines or by any principal with write access to PolicyReport objects in the cluster. An attacker with such write permissions creates or modifies a PolicyReport containing an HTML payload such as a <script> or <img onerror> tag in a property value. When an operator opens the policy reporter UI, the malicious property is rendered through v-html and the script executes in the operator's browser context.
The vulnerability mechanism is described in detail in the GitHub Security Advisory GHSA-q98m-7w8c-w388.
Detection Methods for CVE-2026-44245
Indicators of Compromise
- PolicyReport objects whose .results[].properties values contain HTML tags, JavaScript event handlers such as onerror or onclick, or <script> elements
- Browser console errors or unexpected network requests originating from the policy reporter UI domain
- Audit log entries showing create or update operations on PolicyReport resources from non-policy-engine service accounts
Detection Strategies
- Inspect PolicyReport and ClusterPolicyReport custom resources for property values that contain angle brackets, JavaScript URI schemes, or HTML entity encodings
- Review Kubernetes audit logs for write activity to wgpolicyk8s.io resources from unexpected identities
- Run static analysis against deployed Kyverno versions to confirm whether the PropertyCard.vuev-html sink is present
Monitoring Recommendations
- Enable Kubernetes audit logging for PolicyReport create, update, and patch verbs and forward events to a centralized data lake
- Alert on anomalous principals writing to PolicyReport objects, particularly user accounts rather than policy engine controllers
- Monitor browser telemetry from administrative workstations for unexpected script execution on the policy reporter origin
How to Mitigate CVE-2026-44245
Immediate Actions Required
- Upgrade Kyverno to version 2.5.2 or later, which removes the unsafe v-html usage in PropertyCard.vue
- Audit existing PolicyReport and ClusterPolicyReport objects for HTML or script content and delete any malicious entries
- Review and tighten Kubernetes role-based access control (RBAC) bindings that grant write access to PolicyReport resources
Patch Information
The vulnerability is fixed in Kyverno 2.5.2. The fix removes the v-html directive from the else branch of the URL check in PropertyCard.vue, ensuring that non-URL property values are rendered as text rather than raw HTML. See the Kyverno GitHub Security Advisory for the full advisory and commit references.
Workarounds
- Restrict write access to PolicyReport and ClusterPolicyReport resources to trusted policy engine service accounts only
- Block external access to the policy reporter UI and require administrator authentication behind a reverse proxy until the upgrade is applied
- Apply Kyverno or admission policies that validate PolicyReport property values and reject entries containing HTML tags or script content
# Example admission constraint: reject PolicyReport properties containing angle brackets
kubectl get policyreports.wgpolicyk8s.io -A -o json \
| jq '.items[] | select(.results[].properties | to_entries[].value | test("[<>]")) | {ns: .metadata.namespace, name: .metadata.name}'
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


