Linux kodola KVM hipervizorā atklāts caurums, kas ļauj palaist kodu viesa virtuālajā mašīnā un no tās izkļūt uz resursdatoru. Kļūda ar nosaukumu Januscape (CVE-2026-53359) sēž shadow MMU kodā, kuru KVM izmanto gan uz Intel, gan AMD x86 procesoriem. Drošības pētnieks Hyunwoo Kim (@v4bel) to raksturo kā pirmo publiski zināmo viesa-uz-resursdatoru izkļūšanu, kas nostrādā uz abu ražotāju platformām.
Kods kodolā nonāca 2010. gada 1. augustā ar commit 2032a93d66fa (kodols 2.6.36) un palika nepamanīts gandrīz 16 gadus. Publiskais koncepta pierādījums avarē resursdatoru. Kim apgalvo, ka atsevišķs, nepubliskots eksploits to pārvērš pilnā resursdatora koda izpildē. Labojums mainline stabilajos kodolos ieradās 4. jūlijā.
Kļūdu Kim iesniedza caur Google kvmCTF programmu — atlīdzības shēmu, kas maksā par KVM hipervizora izkļūšanām. Tas ir N-day gadījums: ielāps un koncepta pierādījums ir publiski vienlaikus, tāpēc laika logs starp caurumu publiskošanu un uzbrucēju rīcību ir mazs.
Kā caurums darbojas
KVM shadow MMU uztur resursdatora puses lapu tabulas, kas viesa atmiņas adreses sasaista ar reālo resursdatora atmiņu. Kad KVM meklē jau esošu shadow lapu, ko izmantot atkārtoti, funkcija kvm_mmu_get_child_sp() salīdzināja tikai viesa kadra numuru (gfn). Tā neievēroja lauku role.word, kas pieraksta, vai shadow lapa ir tieša (direct) vai netieša viesa lapu tabulas kopija.
Uzbrukuma gaita ir šāda. Viess izveido lielu 2 MB kartējumu, un KVM tam uzbūvē tiešu shadow lapu (direct=1). Pēc tam viess šo kartējumu pārraksta tā, lai adrese ietu caur 4 KB lapu tabulu — jaunajam ceļam vajag netiešu shadow lapu (direct=0). KVM atkārtotās izmantošanas loģika atrod lapu ar sakritušu gfn, bet role neatbilstību neievēro. Tīrīšanas brīdī KVM aprēķina nepareizu kadra numuru un neizņem reverse-map ierakstu. Shadow lapu atbrīvo, kamēr novecojušais reverse-map ieraksts joprojām uz to rāda; nākamā reverse-map staigāšana pieskaras jau atbrīvotai atmiņai. Tā ir use-after-free kļūda.
Kāpēc 16 gadus neviens nepamanīja
Kodu no ikdienas lietošanas paslēpa aparatūra. Mūsdienu resursdatori ar Intel EPT vai AMD NPT parastiem viesiem shadow MMU neizmanto — ievainojamais ceļš nostrādā tikai tad, kad viesim ieslēgta ligzdotā virtualizācija (nested virtualization). Tikai tāds viess spēj piespiest KVM iet caur veco shadow-paging kodu.
Otrs iemesls ir laika sacīkste. Trigeris prasa asinhronas kartējumu izmaiņas un precīzu laika spiedienu, tāpēc drošs eksploits nav triviāls. TuxCare izmēģinājumos AlmaLinux 9 (kodols 5.14.0-687.5.3.el9_8) dažu sekunžu līdz minūšu laikā ieguva fatālu kodola BUG funkcijā pte_list_remove(); Ubuntu 24.04 (kodols 6.8.0-111-generic) tā vietā izdeva brīdinājumu, taču shadow MMU stāvoklis jau bija sabojāts.
Januscape nav pirmā reize, kad šī shadow-paging vieta ķeras. Maijā labotais CVE-2026-46113 (commit 0cb2af2ea66a) risināja radniecīgu gadījumu, kurā KVM izmantoja shadow lapu, kas būvēta nepareizam gfn. Tas pievienoja gfn pārbaudi, bet ar to nepietika — Januscape parādīja, ka tikpat nepieciešama ir role pārbaude. Vajadzīgi ir abi ielāpi; viens pats nevienu no cauriem neaizver.
Ko tas nozīmē hostinga un mākoņa videi
Problēma skar jebkuru x86 vidi, kas uztur neuzticamus viesus ar ieslēgtu ligzdoto virtualizāciju. Uzbrucējs, kas noīrē vienu tādu instanci, var avarēt resursdatoru un līdz ar to nogāzt visas pārējās tā paša fiziskā datora viesu mašīnas. Tas attiecas uz koplietošanas hostinga mezgliem, publiskiem mākoņiem un jebkuru vidi, kur klients var palaist savu kodolu vai ieslēgt ligzdoto virtualizāciju.
Daudzās izplatībās ligzdotā virtualizācija pēc noklusējuma ir ieslēgta, tāpēc pārbaudīt, vai tā tiešām ir vajadzīga, ir pirmais darāmais. Ja iekārta viesus nemaz nepalaiž, KVM ceļš netiek izmantots, bet ielādēts modulis joprojām paliek uzbrukuma virsma.
SUSE kļūdai piešķīra CVSS vērtējumu 8.8 (v3.1) un 9.3 (v4.0). NVD to publiskoja 4. jūlijā, embargo krita 6. jūlijā.
Publiskais koncepta pierādījums ir pieejams GitHub. Tas viesim ar ielādējamu kodola moduli ļauj droši avarēt resursdatoru; nepubliskotā versija, pēc autora vārdiem, sniedz pilnu resursdatora kontroli ar root tiesībām.
Labojums un ko darīt tagad
Pats labojums ir viena rinda funkcijā kvm_mmu_get_child_sp() (commit 81ccda30b4e8, iekļauts 19. jūnijā): shadow lapu atkārtoti izmanto tikai tad, ja sakrīt gan gfn, gan role.word. Ja tie neatbilst, KVM veco ierakstu izmet un uzbūvē pareizo shadow lapu.
Stabilie kodoli ar labojumu 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 atjaunināt uzreiz nevar, palīdz šādi soļi:
- resursdatoriem, kam ligzdotā virtualizācija nav vajadzīga, to izslēdz ar
options kvm_intel nested=0(vai AMD ekvivalentu) — tas noņem neuzticamā viesa izkļūšanas ceļu; - ja KVM vispār netiek lietots, moduli izlādē un bloķē caur
/etc/modprobe.d/; - RHEL saimes resursdatoriem, kam vajag gan VM, gan ligzdoto virtualizāciju,
/dev/kvmtiesības sašaurina no 0666 uz 0660.
Kodola būvēšanas datums vien nav uzticama pazīme. Labojuma klātbūtni pārbauda pēc konkrētajām versijām vai ielāpu rīka izvades, meklējot CVE-2026-53359 un CVE-2026-46113.
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
- Cloud Security Alliance — Januscape: 16-Year-Old KVM Flaw Enables VM Escape
- GitHub — V4bel/Januscape (koncepta pierādījums)
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.