drošība · 5 min · 11.07.2026

Januscape: 16 gadus vecs KVM caurums ļauj viesa VM izkļūt līdz saimniekdatoram uz Intel un AMD

Kļūda, kas Linux kodola KVM hipervizorā gulēja kopš 2010. gada, ļauj viesa virtuālajai mašīnai izkļūt no izolācijas un aizsniegt saimniekdatoru. Drošības pētnieks Hyunwoo Kim (@v4bel) to iesniedza kā nulles dienas ievainojamību Google kvmCTF programmā, un tā ieguva nosaukumu Januscape un apzīmējumu CVE-2026-53359. Labojumi stabilajos kodolos parādījās 4. jūlijā.

Problēma ir use-after-free KVM ēnu MMU (shadow MMU) kodā, failā arch/x86/kvm/mmu/mmu.c. Tā skar gan Intel, gan AMD x86 platformas, bet tikai tad, kad saimniekdators darbina ligzdotu virtualizāciju — ēnu MMU ceļš aktivizējas vienīgi ligzdotiem viesiem. Kods pastāv kopš 2.6.36 kodola, tātad aptuveni 16 gadus.

Kā kļūda darbojas

KVM ēnu lapošana (shadow paging) ir programmatūras slānis atmiņas adrešu tulkošanai. Mūsdienu procesori to parasti dara aparatūrā — Intel to sauc par EPT, AMD par NPT —, bet KVM joprojām uztur veco ēnu MMU kodu saderībai un ligzdotiem viesiem.

Kad viess pārkārto atmiņu, funkcija kvm_mmu_get_child_sp() mēģina atkārtoti izmantot kešotas ēnu lapas. Kļūda slēpās tajā, ka funkcija salīdzināja tikai viesa kadra numuru (guest frame number), bet neņēma vērā lapas lomu — tās interpretāciju. 2 MB kartējumu ar atzīmi direct=1 varēja kļūdaini izmantot 4 KB lapu tabulas ceļam, kam vajag direct=0. Atbrīvotā atmiņā palika novecojis reverse-map ieraksts.

Bīstamais brīdis pienāk vēlāk. Kad kodols apstaigā šo reverse-map ieraksti — piemēram, netīro lapu žurnalēšanas (dirty logging) laikā vai MMU-notifier atsaukšanas laikā —, tas dereferencē rādītāju uz jau atbrīvotu atmiņu. Uzbrucējs, kas kontrolē viesi, var virzīt šo secību tā, lai saimniekdatora kodola atmiņā ierakstītu vēlamo. Tā ir klasiskā use-after-free ķēde, tikai pāri virtuālās mašīnas robežai.

Kāpēc kļūda atgriezās

Januscape nav pirmā šāda problēma šajā kodā. Jūnijā tika izlabota radniecīga ievainojamība CVE-2026-46113, kas skāra nepareiza kadra atkārtotu izmantošanu. Tas labojums pārbaudīja, vai KVM ir atradis pareizo kadru. Januscape parādīja, ka jāpārbauda arī, vai atrasts pareizā veida ēnu lapas ieraksts — divas dažādas pārbaudes vienam un tam pašam kešošanas mehānismam. TuxCare apraksts to formulē kā divus atsevišķus labojumus, kas kopā aizver vienu kešošanas ceļu.

Mainline kodolā ielāps nonāca 19. jūnijā ar commit 81ccda30b4e8. Būvējot no koda pēc šī datuma, ar to nepietiek — jāpārliecinās, ka klāt ir arī jūnija CVE-2026-46113 labojums, jo Januscape sedz atšķirīgu gadījumu.

Kam tas ir bīstami

Galvenais risks ir daudznomnieku publiskajos mākoņos, kur uz viena fiziskā saimniekdatora darbojas neuzticamu klientu virtuālās mašīnas ar ieslēgtu ligzdoto virtualizāciju. Ja viena tāda VM aizsniedz saimniekdatoru, brūk visu pārējo tajā pašā mašīnā mītošo viesu izolācija.

Ligzdotā virtualizācija nav eksotika. To ieslēdz CI izpildītāji, kas viesī palaiž vēl vienu VM vai konteineru ar savu kodolu, izstrādes smilšukastes, kā arī daļa mākoņa instanču tipu, kur klients pats grib darbināt hipervizoru. Tieši šie scenāriji uz publiskas infrastruktūras savij neuzticamu kodu ar ievainojamo ēnu MMU ceļu.

Veiksmīga izmantošana sagrauj izolācijas garantiju, uz kuras balstās daudznomnieku virtualizācija: viens ļaunprātīgs klients principā var nolasīt vai sabojāt katru citu viesi, kas dala to pašu fizisko saimniekdatoru, vai izraisīt kodola paniku, kas nogāž visu mašīnu.

Red Hat saimes sistēmās papildu riska faktors ir /dev/kvm ar tiesībām 0666, kas ļauj ierīci atvērt jebkuram vietējam lietotājam. NVD vēl nav piešķīris CVSS vērtējumu; Red Hat konsultācija ievainojamībai deva bāzes vērtējumu 7.

Vai to jau izmanto

Pierādījumu par izmantošanu reālā vidē nav — kļūdu atklāja CTF sacensībās, kur pilna izkļūšana no viesa uz saimniekdatoru maksā līdz 250 000 dolāru. Publiski pieejamais proof-of-concept droši izraisa pakalpojuma atteikumu (DoS). Neatklātais eksploits, pēc autora vārdiem, panāk pilnu izkļūšanu ar root tiesībām, taču izlīdzināšanas ierobežojumi padara uzticamu izmantošanu grūtu. SecurityWeek raksta, ka aktīvas ekspluatācijas pazīmju nav.

Ko darīt

Labojumi ir stabilajos kodolos, kas 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. Pārbaudi, ka kodols satur gan Januscape, gan CVE-2026-46113 labojumu; paļaušanās tikai uz būvējuma datumu var maldināt.

  • Atslēdz ligzdoto virtualizāciju tur, kur tā nav vajadzīga — ēnu MMU ceļš tad neaktivizējas.
  • Ierobežo piekļuvi /dev/kvm konkrētiem kontiem, nevis atstāj to atvērtu ar 0666.
  • Ja klasteri nevar pārstartēt, apsver bezpārstartes ielāpu risinājumus, kas iepako abus labojumus vienā kodola saimē.

Hostiem bez ligzdotas virtualizācijas un mašīnām, kur KVM vispār nav ieslēgts, šis ceļš nav pieejams. Tāpēc pirmais solis daudzos gadījumos ir vienkārši pārbaudīt, vai ligzdotā virtualizācija tiešām ir vajadzīga.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no drošībasaistītie