De bug bevindt zich in vgic_its_invalidate_cache(), die de per-ITS translation cache doorloopt met xa_for_each() en vgic_put_irq() aanroept op de geïtereerde pointer in plaats van op de waarde die veilig wordt geretourneerd door xa_erase(). Omdat meerdere contexten deze functie kunnen aanroepen onder verschillende locks, is de race condition volledig te activeren vanuit een gast door het afhandelen van ITS-commando's, een GITS_CTLR-schrijfactie en het wissen van EnableLPIs in een redistributor te combineren .
'Guest-to-host escapes' zijn zeldzaam, maar vormen de gevaarlijkste klasse van hypervisor-bugs omdat ze de isolatiegrens doorbreken waar cloud computing van afhankelijk is. Eerdere publieke KVM-escaperichtten zich op x86-systemen, meestal via bugs in QEMU of AMD-specifieke code . ITScape is de eerste werkende exploit die een uitbraak demonstreert vanuit een onbevoorrechte arm64-gast-VM via de in-kernel KVM-code zelf — er zijn geen bugs in de gebruikersruimte-emulator voor nodig
.
Voor cloudproviders die Graviton-, Ampere Altra- of andere arm64 KVM-hosts met multi-tenant workloads gebruiken, kan een gast het volgende doen:
De meeste beveiligingsteams hebben de kwetsbaarheid beoordeeld met een CVSS-score boven de 9.0, wat de kritieke ernst ervan weerspiegelt .
De kwetsbare code bevindt zich in het pad voor het ongeldig verklaren van de LPI-translation cache. Wanneer de kernel cache-invoeren moet legen, itereert het door de XArray met xa_for_each() en roept het vgic_put_irq() aan om het aantal referenties op elke invoer te verlagen. Het probleem is dat xa_for_each() invoeren kan retourneren die mogelijk al zijn gewist door een gelijktijdige operatie, zoals een 'DISCARD ITS'-commando van een andere vCPU. De lus voor het ongeldig verklaren verlaagt dan alsnog de referentie op die reeds verwijderde invoer, wat een dubbele vrijgave en uiteindelijk een 'use-after-free' veroorzaakt .
Een eerdere kwetsbaarheid in dezelfde code, CVE-2024-26598, had een UAF in het cache-hitpad deels aangepakt door de refcount te verhogen binnen vgic_its_check_cache() voordat de lock werd vrijgegeven. Die fix dekte echter niet het pad voor het ongeldig verklaren, waardoor de race condition exploiteerbaar bleef via een andere triggervolgorde .
De upstream fix wijzigt vgic_its_invalidate_cache() zodat vgic_put_irq() alleen wordt aangeroepen op de waarde die wordt geretourneerd door xa_erase(), en niet op elke invoer die de iterator tegenkomt. De commit message luidt: "KVM: arm64: vgic-its: Drop the translation cache reference only for the erased entry" .
Omdat xa_erase() atomair de oude invoer verwijdert en retourneert — of NULL retourneert als de invoer al verdwenen was — zorgt de fix ervoor dat de referentieteller precies één keer wordt verlaagd, waardoor het 'double-free'-venster wordt geëlimineerd. De patch werd begin juni 2026 in de upstream-kernel opgenomen en rond 8-10 juni 2026 snel doorgevoerd naar de 6.x-stable serie . Grote distributies zoals Red Hat, SUSE en Debian hebben backported fixes uitgebracht voor hun ondersteunde kernelbranches
.
Hyunwoo Kim heeft rond 9-10 juni 2026 een werkende exploit op GitHub openbaar gemaakt. De repository bevat de volledige broncode, stapsgewijze reproductie-instructies en een technische beschrijving van de exploitatietechniek . De exploit triggert de race door vCPU-threads te coördineren die gelijktijdig DISCARD-commando's en LPI-translation cache-lookups uitvoeren, om zo de 'use-after-free' precies te landen voor code-uitvoering op de host.
De publieke beschikbaarheid van een betrouwbare PoC betekent dat geautomatiseerde exploitscanners en echte aanvallers de kwetsbaarheid met minimale inspanning kunnen bewapenen, waardoor het tijdsvenster tussen openbaarmaking en actieve aanvallen wordt verkort.
Als u multi-tenant arm64 KVM-infrastructuur beheert — AWS Graviton, Ampere Altra of een vergelijkbaar platform — behandel dit dan als een directe noodsituatie voor uw patchcyclus.
Comments
0 comments