CVE-2025-64434
NixOS vulnerability analysis and mitigation

Overview

CVE-2025-64434 is an improper TLS certificate management vulnerability in KubeVirt that allows a compromised virt-handler instance to impersonate virt-api and execute privileged operations against other virt-handler instances. It affects KubeVirt versions prior to 1.5.3 and 1.6.1 (including 1.6.0), as well as Microsoft Azure Linux packages such as azl3_kubevirt_1.5.0-5 and cbl2_kubevirt_0.59.0-x variants. The vulnerability was published on November 6, 2025, and assigned a CVSS v3.1 base score of 6.3 (Medium) by Feedly/NVD, though the GitHub advisory scores it 4.7 (Moderate) (GitHub Advisory, Microsoft MSRC).

Technical details

The root cause (CWE-287: Improper Authentication) lies in the verifyPeerCert function within pkg/util/tls/tls.go. KubeVirt uses mTLS for communication between virt-api and virt-handler, and also between virt-handler instances during VM migration. Critically, both virt-api and virt-handler client certificates share the same Common Name (kubevirt.io:system:client:virt-handler), signed by the same self-signed root CA (kubevirt-ca). Because the peer verification logic only checks the CN field and CA signature — not the identity of the specific component — a compromised virt-handler can reuse its own valid client TLS bundle to authenticate as virt-api against any other virt-handler instance. The fix enforces stricter CN validation in SetupTLSWithCertManager by introducing a VerifyPeerCertificate callback that checks the presented CN against an allowlist provided by a KubernetesCAManager (GitHub Advisory, Patch Commit).

Impact

A successful exploit allows an attacker who has already compromised one virt-handler node to impersonate virt-api and issue privileged VM lifecycle commands (e.g., soft reboot, migration control) against VMs managed by other virt-handler instances across the cluster. The impact is primarily to integrity and availability of managed virtual machines — there is no direct confidentiality impact (no data exfiltration). The attack is scoped to the Kubernetes cluster and does not affect the Kubernetes control plane directly, but could disrupt workloads cluster-wide if multiple nodes are targeted (GitHub Advisory).

Exploitation steps

  1. Initial Access: Gain low-privilege access to a Kubernetes node running a virt-handler pod (e.g., via a compromised container, misconfigured RBAC, or node-level access).
  2. Locate Client Certificate Bundle: Identify the virt-handler's client certificate directory by inspecting the container's volume mounts:
    docker inspect $(docker ps --filter 'Name=virt-handler' --format='{{.ID}}' | head -n 1) | grep 'clientcertificates:ro'
  3. Extract Credentials: Retrieve the tls.crt and tls.key files from the mounted clientcertificates directory (e.g., /path/to/clientcertificates/tls.crt).
  4. Identify Target virt-handler: Determine the IP address of another virt-handler instance on a different node (e.g., 10.244.1.3) that manages target VMs.
  5. Impersonate virt-api: Use the extracted credentials to authenticate against the target virt-handler's sub-resource API (port 8186), bypassing CN-based identity checks:
    curl -ki --cert ${CERT_DIR}/tls.crt --key ${CERT_DIR}/tls.key \
      https://10.244.1.3:8186/v1/namespaces/default/virtualmachineinstances/<vmi-name>/softreboot -XPUT
  6. Execute Privileged Operations: Issue VM lifecycle commands (reboot, migration disruption, etc.) against VMs on the non-compromised node, achieving integrity and availability impact (GitHub Advisory).

Indicators of compromise

  • Network: Unexpected HTTPS connections to virt-handler sub-resource API port (default 8186) originating from a virt-handler pod IP rather than virt-api pod IP; unusual PUT/POST requests to VM lifecycle endpoints (e.g., /v1/namespaces/.../virtualmachineinstances/.../softreboot) from unexpected source IPs.
  • Logs: virt-handler access logs showing authenticated mTLS requests from a peer certificate with CN kubevirt.io:system:client:virt-handler originating from a node that is not the virt-api or a legitimate migration source; unexpected VM lifecycle events (reboot, migration) not correlated with user-initiated actions in the Kubernetes audit log.
  • Process/Container: Unexpected curl, openssl, or similar tools executed within a virt-handler container; access to the clientcertificates volume mount from processes other than the virt-handler binary.
  • Kubernetes Audit: VM lifecycle API calls (softreboot, migrate) appearing in audit logs without a corresponding user or controller request; discrepancies between virt-api request logs and virt-handler operation logs (GitHub Advisory).

Mitigation and workarounds

Upgrade KubeVirt to version 1.5.3 or 1.6.1, which enforce strict CN validation in SetupTLSWithCertManager via a VerifyPeerCertificate callback, preventing virt-handler credentials from being accepted as virt-api credentials. No configuration-based workaround is available for unpatched versions. As interim measures, implement strict network policies to restrict which pods can reach virt-handler API ports, audit and monitor for unauthorized access to virt-handler client certificate volumes, and limit node-level access to reduce the risk of initial virt-handler compromise (GitHub Advisory, Patch Commit).

Community reactions

The KubeVirt project published a security audit results blog post in conjunction with this disclosure, indicating the vulnerability was discovered as part of a formal third-party security audit conducted by Quarkslab (KubeVirt Blog, Quarkslab Audit). Red Hat acknowledged the vulnerability via their security advisory tracker, and SUSE issued a security update for their KubeVirt container packages. The SANS Internet Storm Center noted the vulnerability in a diary entry. Overall community reaction has been measured, consistent with the moderate severity rating and the requirement for prior node compromise.

Additional resources


SourceThis report was generated using AI

Related NixOS vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-45568CRITICAL9.9
  • Python logoPython
  • zrok
NoYesJul 16, 2026
CVE-2026-45576HIGH8.3
  • NixOS logoNixOS
  • zrok
NoYesJul 16, 2026
CVE-2026-36590HIGH7.5
  • NixOS logoNixOS
  • nanomq
NoNoJul 15, 2026
CVE-2026-59259MEDIUM6
  • NixOS logoNixOS
  • n8n
NoYesJul 15, 2026
CVE-2026-26032MEDIUM5.4
  • NixOS logoNixOS
  • ivy
NoYesJul 15, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management