Šest let stará chyba v KVM na x86 pouštěla útočníka z virtuálního stroje na hostitele
Korejský výzkumník Hyunwoo Kim zveřejnil 6. srpna 2026 chybu Zapscape (CVE-2026-64561), use-after-free ve stínových tabulkách stránek linuxového KVM na x86. Útočník, který má roota ve vlastním virtuálním stroji, s ní mohl spustit kód s právy roota na hostiteli, a tím i nad ostatními virtuály na témže železe. V jádře byla od července 2020, oprava se dostala do hlavní řady 21. července 2026.

Kdo si pronajme virtuální stroj u poskytovatele cloudu, spoléhá na to, že se ze svého stroje k sousedům nedostane. Chyba Zapscape, zveřejněná 6. srpna 2026, tenhle předpoklad na linuxových hostitelích rušila. Útočníkovi stačilo mít roota ve vlastním virtuálu a mohl spustit kód s právy roota na hostiteli, tedy i nad všemi ostatními virtuály na témže železe. Případně jen shodit jádro hostitele a odstavit je všechny naráz.
Chybu našel a nahlásil korejský výzkumník Hyunwoo Kim, vede se pod číslem CVE-2026-64561. Postižené je KVM, tedy virtualizační vrstva zabudovaná přímo do linuxového jádra, a to na procesorech x86.
Chyba je ve stínových tabulkách stránek, ne v QEMU
KVM překládá adresy hosta na fyzické adresy hostitele hardwarem: na Intelu se tomu říká EPT, na AMD NPT. Jakmile ale host sám spustí další virtuální stroj, jedna hardwarová vrstva na dva překlady za sebou nestačí. Jádro proto tabulky vnořeného hosta vede softwarově, ve stínových stránkách (shadow MMU).
Těch stránek nesmí přibývat donekonečna, takže je KVM při překročení kvóty rekurzivně uklízí. A právě tam chyba je. Úklid dokáže zneplatnit kořenovou stránku, která se pořád používá; KVM pak výpadek stránky dokončí nad kořenem, který už neplatí. Do seznamu aktivních stránek se tím dostane neplatný potomek, tentýž ukazatel skončí ve dvou seznamech naráz a po uvolnění paměti následuje zápis do ní. Tedy use-after-free.
Kim v technickém popisu zdůrazňuje, že chyba je v jádře, ne v QEMU. Emulace se na ni nemá jak dostat, takže se netýká jen běžné dvojice QEMU a KVM, ale i velkých poskytovatelů, kteří si virtualizační vrstvu nad KVM postavili sami.
Na Intelu má útok podmínku, kterou předchozí chyba neměla
Zapscape není v pořadí první. Kim ho sám řadí jako třetí díl trojice po chybách ITScape (CVE-2026-46316) a Januscape (CVE-2026-53359). Ve stínovém MMU je z nich vedle Zapscapu jen Januscape, a i ten má podle Kima jinou příčinu; ITScape vede záznam CVE v kódu KVM pro arm64.
Rozsah se u nich liší. Januscape šlo podle Kima na Intelu spustit, kdykoli byla zapnutá vnořená virtualizace. U Zapscapu musí být hostu vystavena délka průchodu EPT 4 i 5 zároveň; na AMD žádná taková podmínka není. Veřejná ukázka proto cílí na AMD a běží nad jádrem 7.1.3.
Na RHEL nepotřebuje útočník ani virtuální stroj
Druhá cesta k rootovi se obejde bez virtualizace. Na distribucích jako RHEL je zařízení /dev/kvm zapisovatelné pro všechny (práva 0666), takže chybu může jako lokální eskalaci oprávnění použít i obyčejný neprivilegovaný uživatel. Kim k tomu píše, že v téhle podobě je útok dokonce snazší a stabilnější, protože má k dispozici i ioctl volání ze strany hostitele.
Uvnitř virtuálu naopak útočník musí mít práva jádra, tedy roota. Na pronajaté instanci to obvykle není překážka, protože správce vlastního stroje bývá právě zákazník.
Oprava byla v hlavní řadě jádra dva a půl týdne před popisem
Časová osa je v Kimově dokumentu vypsaná do dne. Hlášení šlo 11. července na adresu security@kernel.org, 13. července napsal opravu Sean Christopherson a 21. července ji Paolo Bonzini poslal do konference jádra a zařadil do hlavní řady. K distribucím zamířila informace 1. srpna s pětidenním embargem, 4. srpna přibylo číslo CVE a 6. srpna vyšel text na konferenci oss-security.
Samotná oprava je krátká. Kontrola na zastaralý kořen se přesunula až za volání make_mmu_pages_available(); když úklid kvóty právě používaný kořen zneplatní, výpadek stránky se místo dokončení zopakuje. Do stabilních řad se dostala ve verzích 6.6.148, 6.12.101, 6.18.42 a 7.1.6, v hlavní řadě je od 7.2-rc5.
Záznam CVE k tomu dodává jednu věc, kterou popis útoku nemá. Samotný nedostatek je v kódu už od roku 2008, kdy KVM začalo neplatné kořeny sledovat. Nebezpečným se stal až v roce 2020 s jádrem 5.9, kdy přibylo pravidlo, že neplatné stínové stránky nesmějí být v seznamu aktivních. Zranitelný rozsah proto začíná commitem z 8. července 2020 a končí opravou z 21. července 2026, tedy po šesti letech.
Zveřejněná ukázka není hotová zbraň
Součástí zveřejnění je i ukázkový kód. Kim u něj rovnou píše, že to není útok použitelný v cloudu, ale demonstrace, která chybu reprodukuje nad emulací QEMU TCG. Kdo by ji chtěl nasadit doopravdy, musel by kroky prováděné uvnitř hosta přesunout do jaderného modulu a exploit upravit podle konfigurace jádra hostitele. Že to není nijak těžké, dodává tamtéž. Po úspěšném průchodu ukázka na hostiteli založí soubor /Zapscape, jehož vlastníkem je root.
Na otázku, jestli se v KVM budou takové chyby objevovat dál, odpovídá Kim ve svém textu jediným slovem: ano. Provozovatelům hypervizorů k tomu doporučuje mít na záplatování hostitelů zavedený postup, se kterým se dá počítat dlouhodobě. Čísla CVE té trojice jsou z 9. června, 4. července a 4. srpna 2026, tedy ze dvou měsíců, a dvě z nich míří do téhož kusu kódu.
Zdroje: popis a ukázkový kód Zapscape od Hyunwoo Kima, oznámení v konferenci oss-security, záznam CVE-2026-64561 a zpráva Phoronixu.