
Exploit PoC para CVE-2026-64561, un use-after-free de la shadow MMU de KVM/x86 que permite el escape de invitado a host con ejecución de código root en el kernel del host.

Este documento describe la vulnerabilidad Zapscape (CVE-2026-64561), descubierta e informada por Hyunwoo Kim (@v4bel). Es una vulnerabilidad de escape de KVM que permite a un invitado escapar al host en un entorno KVM/x86 y ejecutar comandos en el host con privilegio de kernel (root).
Zapscape es una vulnerabilidad de use-after-free en la emulación de la shadow MMU de KVM/x86, concretamente en la ruta de zap recursiva que se ejecuta cuando se reclaman las páginas shadow. Se puede desencadenar el fallo solo con acciones del lado del invitado para corromper la página shadow del kernel del host, y puede amenazar el aislamiento invitado-host de los hosts KVM/x86 que aceptan invitados no confiables y exponen virtualización anidada, en particular las nubes públicas x86 multi-tenant.
Para obtener información técnica detallada, consúltalo aquí.
[!NOTE] Después de informar esta vulnerabilidad a [email protected], el embargo acordado ha terminado, por lo que el exploit se ha publicado en oss-security y este documento de Zapscape se ha hecho público. Para conocer el cronograma de divulgación, consulta el documento de detalle técnico.
El PoC está escrito para apuntar a AMD y, para realizar pruebas seguras, se recomienda ejecutarlo bajo QEMU TCG. El PoC tiene la siguiente estructura.
L0: Linux 7.1.3 + KVM_AMD on an x86_64 CPU (AMD SVM/NPT) emulated by QEMU TCG. The escape target
└─ L1: the guest poc creates. Switching long -> PAE aliases one shadow page as both child and pinned root, and L1 then escalates the UAF into L0 kernel code-exec
└─ L2: the guest L1 VMRUNs. Its memory touches trigger L0's quota reclaim -> recursive zap with no root_count guard -> UAF
Este PoC no es un exploit armado que se ejecute de inmediato en un entorno de nube, sino un código de demostración que reproduce la vulnerabilidad y la cadena de exploit completa sobre QEMU TCG. Para usarlo en un entorno de nube real, las acciones de L1 que realiza el PoC deben trasladarse a un módulo del kernel del invitado, y el exploit debe adaptarse para que coincida con el kconfig del kernel del host. No es una tarea difícil.
# gcc -O2 -g -static -pthread poc.c -o poc
# ./qemu.sh bzImage initramfs.cpio.gz
[+] /Zapscape created by the target KVM host kernel (owner uid=0, mode=0644). [+] exploit completed - verify with: ls -la /Zapscape zapscape(uid=65534)$ ls -la /Zapscape -rw-r--r-- 1 root root 0 Jul 29 05:27 /Zapscape zapscape(uid=65534)$
Este PoC tiene la intención de proporcionar información precisa. No lo utilices en sistemas en los que no estés autorizado a realizar pruebas.
# Versiones afectadas
Zapscape (CVE-2026-64561) cubre el rango que va desde [f95eec9bed76 (2020-07-08)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f95eec9bed76) hasta [2abd5287f083 (2026-07-21)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2abd5287f083).
# Preguntas frecuentes
## ¿Cuál es el impacto de esta vulnerabilidad?
Igual que [Januscape (CVE-2026-53359)](https://github.com/V4bel/Januscape):
1. **Escape de KVM**: Con solo acciones del lado del invitado, un atacante puede comprometer el host que ejecuta su VM. Por ejemplo, un atacante que haya alquilado una sola instancia en una nube pública podría provocar un pánico en el kernel del host para tumbar a todas las demás VM de inquilinos en la misma máquina física (DoS), o ejecutar código con privilegio root en el host para tomar el control del host y de todos los invitados que contiene (RCE).
2. **LPE**: En distribuciones como RHEL, `/dev/kvm` es escribible por todos (`0666`), por lo que un usuario sin privilegios también puede usar esta vulnerabilidad como LPE para obtener root. Cuando se usa como LPE, los ioctls de la VMM del host están disponibles, por lo que el exploit se vuelve más fácil y más estable.
## ¿Cómo se relaciona esto con Januscape?
Ocurre en la misma shadow MMU, pero es una vulnerabilidad separada con una causa raíz diferente.
Dicho esto, a diferencia de Januscape, en Intel solo se puede desencadenar cuando tanto la longitud 4 como la 5 del page walk de EPT están expuestas a L1. Este es un punto importante al evaluar el alcance afectado, por lo que debe entenderse con precisión. Consulta el documento de detalle técnico.
## ¿Esta vulnerabilidad ocurre en QEMU?
No. Al igual que con Januscape, ocurre en el KVM dentro del kernel, por lo que se desencadena independientemente de la emulación de QEMU. Debido a esto, también puede amenazar a grandes nubes públicas que implementan y usan su propia pila de virtualización.
## ¿Necesito root dentro de la VM invitada?
Sí. Se requiere privilegio de kernel en L1. Cuando se te asigna una instancia en una nube pública, normalmente tienes root en tu propia VM, por lo que esto se cumple. En un escenario sin root en el invitado, debe encadenarse con un LPE como [Dirty Frag](https://github.com/V4bel/dirtyfrag).
## ¿Crees que seguirán apareciendo vulnerabilidades de KVM?
Sí. Recomiendo establecer un proceso sostenible de parcheo para los hipervisores de los hosts. *Se acerca el invierno.*
## ¿Planeas una secuela después de la trilogía?
Espero que no.