Fejlen findes i funktionen vgic_its_invalidate_cache(), som gennemgår den per-ITS oversættelsescache med xa_for_each() og kalder vgic_put_irq() på den itererede pointer i stedet for på den værdi, der sikkert returneres af xa_erase(). Flere kontekster kan tilgå denne funktion under forskellige låse, så kapløbet kan helt og holdent udløses fra en gæste-VM ved at blande ITS-kommandohåndtering, et GITS_CTLR-skriv og rydning af EnableLPIs i en redistributør.
Selvom 'guest-to-host escapes' er sjældne, er de den farligste type hypervisor-fejl, fordi de bryder den isolationsgrænse, som cloud computing er afhængig af. Tidligere offentlige KVM-escapes var rettet mod x86, som regel via QEMU eller AMD-specifik kode. ITScape er det første fungerende angreb, der demonstrerer et udbrud fra en uprivilegeret arm64-gæste-VM gennem selve den in-kernel KVM-kode — ingen fejl i userspace-emulatorer er påkrævet.
For cloud-udbydere, der kører AWS Graviton, Ampere Altra eller enhver anden arm64 KVM-vært med multi-tenant arbejdsbelastninger, kan en gæst:
De fleste sikkerhedsteams har bedømt sårbarheden med en CVSS-score over 9.0, hvilket afspejler dens kritiske alvorlighed.
Den sårbare kode findes i invalideringsstien for LPI-oversættelsescachen. Når kernen skal tømme cache-poster, itererer den gennem XArray'et med xa_for_each() og kalder vgic_put_irq() for at frigive referencetælleren på hver post. Problemet er, at xa_for_each() returnerer poster, der allerede kan være blevet slettet af en samtidig handling — for eksempel en DISCARD ITS-kommando udstedt fra en anden vCPU. Invalideringsløkken fjerner stadig referencen på den allerede slettede post, hvilket forårsager et dobbelt put og i sidste ende en 'use-after-free'.
En tidligere sårbarhed i den samme kode, CVE-2024-26598, havde delvist adresseret en UAF i LPI-cachens hit-sti ved at hæve refcount inde i vgic_its_check_cache(), før låsen blev frigivet. Denne rettelse dækkede ikke invalideringsstien, hvilket efterlod kapløbet udnytteligt gennem en anden trigger-sekvens.
Opstrøms-rettelsen ændrer vgic_its_invalidate_cache(), så vgic_put_irq() kun kaldes på den værdi, der returneres af xa_erase(), og ikke på hver post iteratoren berører. Commit-beskeden lyder: "KVM: arm64: vgic-its: Drop the translation cache reference only for the erased entry".
Fordi xa_erase() atomisk fjerner og returnerer den gamle post — eller returnerer NULL, hvis posten allerede var væk — sikrer rettelsen, at referencetælleren kun formindskes én gang, hvilket eliminerer muligheden for en dobbelt frigivelse. Patchen blev inkluderet i opstrøms-kernen i starten af juni 2026 og blev hurtigt trukket ind i den stabile 6.x-serie omkring den 8.-10. juni 2026.
Større distributioner, herunder Red Hat, SUSE og Debian, har udsendt tilbageporterede rettelser til deres understøttede kernegrene.
Hyunwoo Kim frigav offentligt et fungerende angrebsprogram på GitHub omkring den 9.-10. juni 2026. Repositoriet inkluderer den fulde kildekode, trin-for-trin instruktioner til reproduktion og en teknisk beskrivelse af udnyttelsesteknikken. Angrebet udløser kapløbet ved at koordinere vCPU-tråde, der samtidigt udsteder DISCARD-kommandoer og LPI-oversættelsescache-opslag, hvilket præcist rammer 'use-after-free'-fejlen for at opnå kodeeksekvering på værten.
At en pålidelig PoC er offentligt tilgængelig betyder, at automatiske angrebsscannere og virkelige angribere kan våbenliggøre sårbarheden med minimal indsats, hvilket forkorter vinduet mellem offentliggørelse og aktive angreb.
Hvis du driver multi-tenant ARM64 KVM-infrastruktur — AWS Graviton, Ampere Altra eller enhver lignende platform — bør du betragte dette som en nød-patch-cyklus, der skal udføres straks.
Comments
0 comments