Drošības pētnieks Hjonvu Kims 6. jūlijā publiskoja Januscape (CVE-2026-53359), kļūdu Linux kodola KVM hipervizorā, kas ļauj kodam viesa virtuālajā mašīnā izlauzties uz resursdatoru. Caurums slēpās KVM ēnu lapu tulkošanas kodā kopš 2010. gada augusta, tātad 16 gadus.
Kļūda skar gan Intel, gan AMD x86 sistēmas. Pēc publiski pieejamiem datiem tas ir pirmais viesa-uz-resursdatoru izlaušanās gadījums, ko var iedarbināt uz abu ražotāju procesoriem. Labojums nonāca kodola galvenajā zarā 19. jūnijā. Stabilās kodola versijas ar to iznāca 4. jūlijā, dažas dienas pirms embargo beigām.
Kā caurums darbojas
KVM parasti paļaujas uz aparatūras lapošanu (Intel EPT vai AMD NPT). Kad viesim ieslēgta ligzdotā virtualizācija, KVM šo aparatūru vairs neizmanto un uztur savu ēnu lapu tabulu kopiju, kas atspoguļo viesa atmiņas izkārtojumu. Tieši šajā ēnu MMU kodā slēpjas kļūda.
Funkcija kvm_mmu_get_child_sp() atkārtoti izmanto jau kešoto ēnu lapu, salīdzinot tikai viesa kadra numuru un ignorējot lapas lomu. Viesis vispirms izveido 2 MB kartējumu, kuram KVM uztaisa tiešo (direct) lapu. Tad viesis pārraksta kartējumu uz 4 KB ceļu, kuram vajag netiešu lapu. KVM paņem veco tiešo lapu, jo kadra numurs sakrīt, kaut loma atšķiras. Tīrīšanas solis aprēķina nepareizu kadru, atgriezeniskās kartes ieraksts paliek, lapa tiek atbrīvota, bet norāde uz to saglabājas. Vēlāka kartes apstaigāšana nolasa jau atbrīvotu atmiņu. Tas ir klasisks use-after-free. Mehānismu apraksta The Hacker News.
Ko tas nozīmē praksē
Uzbrukumam vajag divus nosacījumus: root tiesības viesa mašīnā un ieslēgtu ligzdoto virtualizāciju. Vairumā gadījumu kļūda beidzas ar resursdatora kodola paniku, tātad pakalpojuma atteikumu. Retākos scenārijos atbrīvotā atmiņa nonāk citā lietojumā. Tīrīšana tur ieraksta savu vērtību, kas paver ceļu koda izpildei ar root tiesībām uz resursdatora.
Pilnu izlaušanās eksploitu Kims nav publiskojis. Pieejamais koncepta pierādījums resursdatoru droši noved līdz panikai dažu sekunžu līdz minūšu laikā. Kļūdu apstiprināja uz AlmaLinux 9 un Ubuntu 24.04. RHEL saimes sistēmās, kur /dev/kvm ir atvērts visiem (režīms 0666), to var iedarbināt arī parasts vietējais lietotājs bez atsevišķas virtuālās mašīnas.
Lielākais risks ir daudznomnieku mākoņiem un koplietotiem CI izpildītājiem, kur svešs kods likumīgi darbojas viesa mašīnā ar root tiesībām. Tur ligzdotā virtualizācija bieži ir ieslēgta, lai viesī varētu palaist konteinerus vai vēl vienu hipervizoru. Mājas serverim ar vienu uzticamu viesi risks ir mazāks, tomēr labojums der visiem.
Problēma nav tā, ka kodols ir par vecu. Problēma ir tā, ka aparatūra ir par jaunu.
Tā formulē TuxCare: mūsdienu dzelzis liekas drošs, taču zem tā joprojām strādā 16 gadus vecā ēnu MMU loģika.
Divi CVE, viens caurums
Januscape nav pirmā kļūda šajā kodā. Maijā izlaboja CVE-2026-46113, kas skāra citu ēnu lapu atkārtotas izmantošanas scenāriju. Tā labojums (commit 0cb2af2ea66a) pievienoja kadra numura pārbaudi, bet atstāja vaļā lomas neatbilstību. Tieši to izmanto Januscape. Jaunais labojums (commit 81ccda30b4e8) pirms lapas atkārtotas izmantošanas salīdzina visu lomas lauku. Ja lomas nesakrīt, KVM veco ierakstu izmet un uztaisa pareizo lapu. Abi labojumi vajadzīgi kopā, jo tikai CVE-2026-46113 aizvēršana Januscape neaptur. Šo ēnu lapošanas apgabalu kodola izstrādātāji lāpa jau vairākus gadus, jo katrs labojums aizver vienu ceļu un atstāj citu.
Labojumu autori ir KVM uzturētāji Paolo Bonzīni un Šons Kristofersons. Kims kļūdu iesniedza kā nulles dienas ievainojamību Google kvmCTF programmā, kas par šādu atradumu maksā līdz 250 000 dolāru.
Ko darīt tagad
Galvenais solis ir atjaunināt kodolu. Labotās versijas iznāca 4. jūlijā: 7.1.3, 6.18.38, 6.12.95, 6.6.144, 6.1.177, 5.15.211 un 5.10.260.
Ja viesiem ligzdotā virtualizācija nav vajadzīga, to var izslēgt ar kodola parametru kvm_intel.nested=0 vai kvm_amd.nested=0 un pārbaudīt stāvokli failā /sys/module/kvm_intel/parameters/nested. Ja KVM uz resursdatora vispār netiek lietots, moduļus var izkraut ar modprobe -r. RHEL sistēmās, kur virtuālās mašīnas ar ligzdoto virtualizāciju jāsaglabā, vismaz ierobežojiet piekļuvi /dev/kvm līdz režīmam 0660 grupai kvm. ARM64 resursdatorus kļūda neskar.
Uzbrukuma pēdas var pamanīt kodola žurnālā. Raksturīgi ir BUG vai brīdinājumi failā arch/x86/kvm/mmu/mmu.c, īpaši funkcijā pte_list_remove(). Vēl viens signāls ir ziņojumi par kadra numura neatbilstību no kvm_mmu_page_set_translation(). Neizskaidrojama resursdatora panika QEMU darbības laikā arī norāda uz problēmu. Šādu ziņojumu neesamība tomēr nepierāda, ka sistēma ir salāpīta.
Kļūdu ieviesa 2010. gada 1. augusta commit 2032a93d66fa kodola versijā 2.6.36. Kopš tā laika to nesa līdzi katra x86 sistēma ar KVM ligzdoto virtualizāciju.
Avoti
- The Hacker News: 16-Year-Old Linux KVM Flaw Lets Guest VMs Escape to Host
- TuxCare: Januscape exposes the KVM shadow-paging bug that kept coming back
- SecurityWeek: Linux Kernel Vulnerability Allows VM Escape on Intel and AMD Systems
- Threat-Modeling.com: CVE-2026-53359 Januscape
- CloudLinux: Januscape mitigation and kernel update
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.