Zapscape: Guest-to-Host Escape in KVM/x86

De KVM Escape Trilogie

  • ITScape (CVE‑2026‑46316)
  • Januscape (CVE‑2026‑53359)
  • Zapscape (CVE‑2026‑64561)

Abstract

Zapscape is een use-after-free kwetsbaarheid in de shadow MMU-emulatie van KVM/x86, specifiek in het recursieve "zap"-pad dat wordt uitgevoerd wanneer shadow pages worden teruggevorderd (reclaimed). De bug kan worden geactiveerd door acties aan de guest-zijde om de shadow page van de hostkernel te corrumperen. Dit vormt een bedreiging voor de isolatie tussen guest en host op KVM/x86 hosts die onbetrouwbare guests accepteren en geneste virtualisatie toestaan, in het bijzonder bij multi-tenant x86 public clouds.

Voor gedetailleerde technische informatie kan men naar de bijbehorende documentatie kijken.

Opmerking: Na melding van deze kwetsbaarheid aan linux-distros@vs.openwall.org is het overeengekomen embargo verlopen. Daarom is de exploit geplaatst op oss-security en is dit Zapscape-document gepubliceerd. Raadpleeg het technische detaildocument voor de tijdlijn van de openbaarmaking.

PoC Structuur

De Proof of Concept (PoC) is geschreven om AMD te targeten. Voor veilig testen wordt aangeraden deze onder QEMU TCG uit te voeren. De PoC heeft de volgende structuur:

  • L0: Linux 7.1.3 + KVMAMD op een x8664 CPU (AMD SVM/NPT) geëmuleerd door QEMU TCG. Dit is het doel van de escape.
  • L1: De guest PoC die wordt aangemaakt. Door te schakelen tussen longPAE aliases wordt één shadow page zowel als child als pinned root aangemerkt. L1 escaleert vervolgens de UAF naar L0 kernel code-executie.
  • L2: De guest L1 voert VMRUN uit. Geheugentoegang hiervan triggert L0's quota reclaim → recursieve zap zonder root_count guard → UAF.

Deze PoC is geen "weaponized" exploit die direct in een cloudomgeving werkt, maar demonstratiecode die de kwetsbaarheid en de volledige exploit-keten reproduceert op QEMU TCG. Om dit in een echte cloudomgeving te gebruiken, moeten de L1-acties van de PoC worden verplaatst naar een guest kernelmodule en moet de exploit worden geport om overeen te komen met de kconfig van de hostkernel. Dit is geen moeilijke taak.

Gebruik van de PoC

  1. Download de kwetsbare v7.1.3 kernelbronnen en build vervolgens het kernel-image op basis van de gebundelde kconfig.
  2. Build de PoC en stel een geschikt initramfs samen met BusyBox of iets dergelijks; plaats de gebouwde PoC in het initramfs.
# gcc -O2 -g -static -pthread poc.c -o poc
  1. Boot het Linux 7.1.3 doelwit met het volgende commando. Test op QEMU v9.2.0 of later:
# ./qemu.sh bzImage initramfs.cpio.gz

Nadat QEMU TCG is opgestart, kan de PoC worden uitgevoerd. Bij een succesvolle exploit ontsnapt deze uit de guest en maakt hij het bestand /Zapscape aan op de host, eigendom van root.

Voorbeeld output:

/$$$$$$$$  /$$$$$$  /$$$$$$$
|_____ $$  /$$__  $$| $$__  $$
/$$/ | $$  \ $$| $$  \ $$
/$$/  | $$$$$$$$| $$$$$$$/
/$$/   | $$__  $$| $$____/
/$$/    | $$  | $$| $$
/$$$$$$$$| $$  | $$| $$
|________/|__/  |__/|__/
[+] /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)$

Deze PoC is bedoeld om accurate informatie te verschaffen. Gebruik deze niet op systemen die u niet bevoegd bent om te testen.

Beïnvloede Versies

Zapscape (CVE-2026-64561) beslaat de reeks van f95eec9bed76 (2020-07-08) tot 2abd5287f083 (2026-07-21).

FAQ

Wat is de impact van deze kwetsbaarheid? Dezelfde als Januscape (CVE-2026-53359):

  • KVM escape: Met uitsluitend acties aan de guest-zijde kan een aanvaller de host compromitteren die hun VM draait. Bijvoorbeeld: een aanvaller die slechts één instantie heeft gehuurd in een public cloud, zou de hostkernel kunnen laten crashen om alle andere tenant-VM's op dezelfde fysieke machine uit te schakelen (DoS), of code met root privileges op de host kunnen uitvoeren om de host en alle guests daarop over te nemen (RCE).
  • LPE: Op distributies zoals RHEL is /dev/kvm wereldwijd beschrijfbaar (0666), waardoor een onbevoorrechte gebruiker deze kwetsbaarheid ook kan gebruiken als Local Privilege Escalation (LPE) om root-rechten te verkrijgen. Wanneer het als LPE wordt gebruikt, zijn host-side VMM ioctls beschikbaar, waardoor de exploit eenvoudiger en stabieler wordt.

Hoe is dit gerelateerd aan Januscape? Het vindt plaats in dezelfde shadow MMU, maar het is een aparte kwetsbaarheid met een andere bronoorzaak. Dat gezegd hebbende: in tegenstelling tot Januscape kan het op Intel alleen worden geactiveerd wanneer zowel EPT page walk length 4 als 5 beschikbaar zijn voor L1. Dit is een belangrijk punt bij het beoordelen van de reikwijdte; zie hiervoor het technische detaildocument.

Komt deze kwetsbaarheid voor in QEMU? Nee. Net als bij Januscape bevindt de fout zich in de in-kernel KVM en wordt deze onafhankelijk van de emulatie van QEMU geactiveerd. Hierdoor kan het ook grote public clouds bedreigen die hun eigen virtualisatiestack implementeren en gebruiken.

Heb ik root-rechten nodig binnen de guest VM? Ja. L1 kernel privilege is vereist. Wanneer u een instantie krijgt toegewezen in een public cloud, heeft u gewoonlijk root op uw eigen VM, dus aan deze voorwaarde is voldaan. In een scenario zonder guest root moet dit worden gekoppeld aan een LPE zoals Dirty Frag.

Denkt u dat er meer KVM-kwetsbaarheden zullen verschijnen? Ja. Ik raad aan om een duurzaam patchproces in te richten voor host hypervisors. Winter is coming.

Bent u van plan een vervolg te maken na de trilogie? Ik hoop van niet.