CVE-2026-13201: KubeVirt Symlink Following in virt-handler Privilege Escalation
KubeVirt's file path handling contains a symlink-following vulnerability that allows attackers with pod-level access to compromise virtual machine management. An attacker in a virt-launcher pod can intercept management socket communications, inject fake VM lifecycle events, or manipulate file ownership on host paths. The result is that virt-handler—the component responsible for VM lifecycle management—can be tricked into corrupting VM state, crashing, or denying service to all VMs on an affected node.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 7.3 HIGH · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:H
- Weaknesses (CWE)
- CWE-61
- Affected products
- 2 configuration(s)
- Published / Modified
- 2026-06-24 / 2026-07-06
NVD description (verbatim)
A flaw was found in KubeVirt's safepath package used by virt-handler. The OpenAtNoFollow function uses O_PATH|O_NOFOLLOW to obtain a file descriptor to a path leaf, but downstream operations resolve the path via /proc/self/fd/N using link-following syscalls. When the leaf is a symlink, the kernel dereferences it, defeating the intended no-follow protection. An attacker with access to a virt-launcher pod can exploit this to redirect virt-handler's IPC socket connections, including the notify socket used for VM domain lifecycle events. By hijacking this socket, the attacker can inject arbitrary domain events into virt-handler, causing it to take incorrect lifecycle actions, corrupt VM state in the Kubernetes API, or crash — resulting in sustained denial of VM management services for all virtual machines on the affected node. Additionally, the same symlink following flaw allows virt-handler to apply file ownership or permission changes to unintended host paths.
2 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
CVE-2026-13201 exploits a gap between the intention and implementation of KubeVirt's OpenAtNoFollow function in the safepath package. The function opens a file descriptor using O_PATH|O_NOFOLLOW flags, which prevents the kernel from dereferencing symlinks at open time. However, subsequent operations access the file descriptor via /proc/self/fd/N, where the kernel resolves symlinks at access time via link-following syscalls. When the leaf component of a path is a symlink, this causes the kernel to dereference it, bypassing the no-follow guarantee. An attacker with code execution in a virt-launcher pod can craft symlinks to redirect virt-handler's systemd notify socket (/run/systemd/notify) or IPC socket connections to attacker-controlled paths. This enables injection of arbitrary domain lifecycle events (start, stop, crash notifications) into virt-handler, triggering unintended state transitions in the Kubernetes API and affecting VM availability cluster-wide.
Business impact
For organizations running KubeVirt-based virtual machine workloads on Kubernetes, this vulnerability creates a multi-stage attack path: a compromised or malicious container in a virt-launcher pod can persistently deny VM management services, corrupt virtual machine definitions in etcd, or trigger cascading restarts of virt-handler across nodes. In multi-tenant environments, a rogue user pod could degrade or crash VM services for other tenants. The HIGH severity reflects the combination of easy exploit trigger (local pod access), high-impact consequences (denial of all VM services on a node), and cross-boundary blast radius (affects virt-handler behavior cluster-wide).
Affected systems
KubeVirt kubevirt and Red Hat OpenShift Virtualization are affected. Any Kubernetes cluster running KubeVirt with virt-handler and virt-launcher pods where the safepath package contains the vulnerable OpenAtNoFollow implementation is in scope. Typically this affects KubeVirt deployments on self-managed Kubernetes and Red Hat OpenShift platforms that offer virtualization capabilities. Verify your specific version against vendor advisories to confirm exposure.
Exploitability
Exploitation requires local pod-level access (code execution in a virt-launcher pod), making this a post-compromise or insider threat vulnerability rather than a remote worm vector. The CVSS vector (AV:L/AC:L/PR:L) reflects this: the attack vector is local, attack complexity is low, and privilege level is low (standard pod user). Once inside a pod, the attacker does not need elevated privileges or special configuration. The technique is straightforward: create symlinks in predictable paths (typically /run) that redirect to legitimate virt-handler sockets, then trigger socket access by virt-handler. This is not yet tracked in the CISA KEV catalog, indicating either recent discovery or limited evidence of active exploitation in the wild.
Remediation
Patch virt-handler and the KubeVirt safepath package to a version that correctly implements symlink-safe file operations. The fix likely involves using openat2() with the RESOLVE_NO_SYMLINKS flag, or validating that the opened file descriptor points to the intended non-symlink path before performing subsequent operations. Red Hat OpenShift Virtualization users should consult the Red Hat security advisory for the corresponding patched build. Until patched, restrict virt-launcher pod creation and access to trusted image sources and apply network policies to limit lateral movement from compromised pods.
Patch guidance
Contact your KubeVirt vendor or consult the official KubeVirt release notes and Red Hat OpenShift Virtualization advisories for patched version numbers and deployment steps. Patches should be tested in a staging cluster before rolling out to production, as virt-handler is a critical control-plane component. Standard Kubernetes rolling update procedures apply: update the virt-handler DaemonSet image, monitor for pod restarts, and verify that VMs remain schedulable and responsive during the rollout.
Detection guidance
Monitor virt-handler logs for unexpected domain lifecycle events or socket access errors that do not correspond to legitimate VM state changes. Audit /proc for virt-handler processes opening file descriptors and then accessing them via /proc/self/fd/N to paths containing symlinks in /run or /var/run. Check virt-launcher pod logs for symlink creation attempts in shared mount points (e.g., /dev/shm, /run/user). File integrity monitoring on virt-handler binary and configuration can detect post-exploitation tampering. Runtime pod security policies that prevent symlink creation in shared directories would block the attack vector. RBAC auditing of virt-launcher pod creation may surface unauthorized pod deployments.
Why prioritize this
A HIGH severity vulnerability with local attack surface and high impact to VM service availability warrants priority patching. In environments where KubeVirt provides production VM hosting, this should be addressed within the same patch cycle as critical infrastructure updates. Organizations with strong pod isolation and image scanning may lower urgency slightly, but the risk of insider threat or supply-chain compromise of virt-launcher images means this should not be deferred indefinitely.
Risk score, explained
The CVSS 7.3 HIGH score reflects high availability impact (A:H) and integrity impact (I:L) against a high-value target (virt-handler, a control-plane daemon), combined with low barrier to exploitation (local pod access, no complexity, low privilege). The scope change (S:C) indicates that a successful attack affects resources beyond the security scope of the virt-launcher pod itself—specifically, the VM state and availability of other VMs on the node. The lack of confidentiality impact (C:N) prevents a critical score, but the attack's ability to corrupt state and deny service is severe.
Frequently asked questions
Can an attacker trigger this vulnerability from outside the cluster?
No. The attack requires code execution within a virt-launcher pod (local access), so external attackers cannot exploit this directly. However, compromised container images, supply-chain attacks, or insider threats could place malicious code inside a pod. Network segmentation alone cannot prevent exploitation if the attacker has already gained pod-level access.
Does this affect virt-controller or only virt-handler?
The vulnerability is specific to virt-handler's use of the safepath package's OpenAtNoFollow function. virt-controller may use safepath for other operations; consult the vendor advisory to confirm which components are affected and require patching.
What is the difference between the vulnerability and a standard symlink attack?
Standard symlink attacks exploit time-of-check-to-time-of-use (TOCTOU) gaps or O_NOFOLLOW not being set at all. This vulnerability is subtle: O_NOFOLLOW is correctly set at open time, but the code later accesses the file descriptor via /proc/self/fd/N, where the kernel applies link-following rules during dereferencing, re-introducing the symlink vulnerability downstream.
If we restrict pod networking, are we protected?
Network policies cannot prevent this attack because it exploits local IPC sockets and file operations within the node's filesystem, not network communication. Pod-level network isolation does not stop symlink hijacking of local sockets. You must patch virt-handler or prevent untrusted pod creation.
This analysis is provided for informational purposes based on published vulnerability data and vendor advisories as of the date of publication. SEC.co makes no warranty regarding the accuracy, completeness, or timeliness of this information. Patch version numbers, affected product versions, and remediation timelines should be verified against official vendor advisories and security bulletins. Exploitation techniques and proof-of-concept code are not provided herein. Organizations should conduct their own risk assessment, testing, and validation before applying patches or making security decisions. This vulnerability intelligence does not constitute legal or professional security advice. Source: NVD (public-domain), retrieved 2026-08-02. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-13208MEDIUMKubeVirt virt-handler gRPC Identity Validation Flaw
- CVE-2026-12958HIGHSymlink Validation Bypass in AWS Language Servers
- CVE-2026-42306HIGHDocker Engine Race Condition in Bind Mount Setup (CVSS 7.2)
- CVE-2026-56815HIGHpwnlift Symlink Following in Upload Handler (CVSS 7.4)
- CVE-2025-43278MEDIUMmacOS Sequoia Symlink Handling Vulnerability – Patch to 15.4
- CVE-2023-54365HIGHTraefik HTTP/2 Denial of Service Vulnerability – Rapid Reset Attack
- CVE-2026-12112HIGHForeman MCP Server Session Hijacking Vulnerability
- CVE-2026-1784HIGHHAProxy Configuration Injection in Red Hat OpenShift Routes