
Exploit PoC per CVE-2026-64561, una vulnerabilità use-after-free nella shadow MMU di KVM/x86 che consente la fuga da guest a host con esecuzione di codice a livello di kernel con privilegi di root sull'host.

Questo documento descrive la vulnerabilità Zapscape (CVE-2026-64561) scoperta e segnalata da Hyunwoo Kim (@v4bel). Si tratta di una vulnerabilità di escape di KVM che consente a una guest di evadere verso l'host in un ambiente KVM/x86 e di eseguire comandi sull'host con privilegi di kernel (root).
Zapscape è una vulnerabilità use-after-free nell'emulazione della shadow MMU di KVM/x86, in particolare nel percorso zap ricorsivo che viene eseguito quando le shadow page vengono recuperate. Può innescare il bug con sole azioni lato guest per corrompere la shadow page del kernel dell'host e può minacciare l'isolamento guest-host degli host KVM/x86 che accettano guest non fidati ed espongono la virtualizzazione annidata, in particolare i cloud pubblici x86 multi-tenant.
Per le informazioni tecniche dettagliate, vedi qui.
[!NOTE] Dopo aver segnalato questa vulnerabilità a [email protected], l'embargo concordato è terminato, quindi l'exploit è stato pubblicato su oss-security e questo documento Zapscape è stato reso pubblico. Per la timeline di divulgazione, consulta il documento dei dettagli tecnici.
Il PoC è scritto per colpire AMD e, per un test sicuro, si consiglia di eseguirlo sotto QEMU TCG. Il PoC ha la seguente struttura.
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
Questo PoC non è un exploit weaponizzato che viene eseguito immediatamente in un ambiente cloud, ma un codice dimostrativo che riproduce la vulnerabilità e l'intera catena di exploit su QEMU TCG. Per usarlo in un ambiente cloud reale, le azioni L1 eseguite dal PoC devono essere spostate in un modulo del kernel della guest e l'exploit deve essere adattato al kconfig del kernel host. Non è un compito difficile.
# 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)$
Questo PoC ha lo scopo di fornire informazioni accurate. Non usarlo su sistemi che non sei autorizzato a testare.
Zapscape (CVE-2026-64561) copre l'intervallo da f95eec9bed76 (2020-07-08) a 2abd5287f083 (2026-07-21).
Lo stesso di Januscape (CVE-2026-53359):
/dev/kvm è scrivibile da tutti (0666), quindi un utente non privilegiato può usare questa vulnerabilità anche come LPE per ottenere root. Quando viene usata come LPE, gli ioctl VMM lato host sono disponibili, quindi l'exploit diventa più semplice e stabile.Si verifica nella stessa shadow MMU, ma è una vulnerabilità separata con una causa principale diversa.
Detto questo, a differenza di Januscape, su Intel può essere innescata solo quando sia la lunghezza 4 che la 5 del page walk EPT sono esposte a L1. Questo è un punto importante quando si valuta l'ambito interessato, quindi deve essere compreso con precisione. Vedi il documento dei dettagli tecnici.
No. Come Januscape, si verifica nel KVM in-kernel, quindi viene innescata indipendentemente dall'emulazione di QEMU. Per questo può minacciare anche i grandi cloud pubblici che implementano e usano il proprio stack di virtualizzazione.
Sì. È richiesto il privilegio di root nel kernel L1. Quando ti viene allocata un'istanza su un cloud pubblico, di solito hai root sulla tua VM, quindi il requisito è soddisfatto. In uno scenario senza root nella guest, deve essere concatenata con un LPE come Dirty Frag.
Sì. Consiglio di stabilire un processo di patch sostenibile per gli hypervisor host. L'inverno sta arrivando.
Spero di no.