
Exploit de PoC para CVE-2026-64561, um use-after-free no shadow MMU do KVM/x86 que permite escape do guest para o host com execução de código no kernel como root no host.
|
ITScape (CVE‑2026‑46316) |
Januscape (CVE‑2026‑53359) |
Zapscape (CVE‑2026‑64561) |

Este documento descreve a vulnerabilidade Zapscape (CVE-2026-64561) descoberta e reportada por Hyunwoo Kim (@v4bel). É uma vulnerabilidade de escape do KVM que permite que um convidado escape para o host em um ambiente KVM/x86 e execute comandos no host com privilégio de kernel (root).
Zapscape é uma vulnerabilidade de use-after-free na emulação de shadow MMU do KVM/x86, especificamente no caminho recursivo de zap que é executado quando as shadow pages são recuperadas. Ela pode acionar o bug apenas com ações do lado do convidado para corromper a shadow page do kernel do host, e pode ameaçar o isolamento convidado-host de hosts KVM/x86 que aceitam convidados não confiáveis e expõem virtualização aninhada, particularmente nuvens públicas x86 multi-tenant.
Para informações técnicas detalhadas, veja aqui.
[!NOTE] Após reportar esta vulnerabilidade para [email protected], o embargo acordado terminou, então o exploit é postado no oss-security e este documento sobre o Zapscape é publicado. Para a linha do tempo da divulgação, veja o documento de detalhes técnicos.
O PoC foi escrito para atingir AMD e, para testes seguros, é recomendado executá-lo sob QEMU TCG. O PoC tem a seguinte estrutura.
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 não é um exploit weaponizado que roda imediatamente em um ambiente de nuvem, mas um código de demonstração que reproduz a vulnerabilidade e a cadeia completa de exploração sobre o QEMU TCG. Para usá-lo em um ambiente de nuvem real, as ações L1 que o PoC executa devem ser movidas para um módulo de kernel convidado, e o exploit deve ser portado para corresponder ao kconfig do kernel do host. Esta não é uma tarefa 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 tem a intenção de fornecer informações precisas. Não o use em sistemas nos quais você não está autorizado a testar.
Zapscape (CVE-2026-64561) abrange o intervalo de f95eec9bed76 (2020-07-08) a 2abd5287f083 (2026-07-21).
O mesmo do Januscape (CVE-2026-53359):
/dev/kvm é gravável por todos (0666), então um usuário sem privilégios também pode usar esta vulnerabilidade como um LPE para obter root. Quando usado como LPE, os ioctls do VMM do lado do host estão disponíveis, então o exploit se torna mais fácil e estável.Ela ocorre na mesma shadow MMU, mas é uma vulnerabilidade separada com uma causa raiz diferente.
Dito isso, ao contrário do Januscape, na Intel ela pode ser acionada somente quando os comprimentos 4 e 5 do page walk da EPT estão expostos ao L1. Este é um ponto importante ao avaliar o escopo afetado, por isso deve ser compreendido com precisão. Veja o documento de detalhes técnicos.
Não. Como no Januscape, ela ocorre no KVM dentro do kernel, então é acionada independentemente da emulação do QEMU. Por causa disso, também pode ameaçar grandes nuvens públicas que implementam e usam sua própria pilha de virtualização.
Sim. Privilégio de kernel L1 é necessário. Quando você recebe uma instância em uma nuvem pública, normalmente você tem root na sua própria VM, então isso é satisfeito. Em um cenário sem root no convidado, ela deve ser encadeada com um LPE como Dirty Frag.
Sim. Recomendo estabelecer um processo sustentável de aplicação de patches para os hipervisores dos hosts. O inverno está chegando.
Espero que não.