vgic_its_invalidate_cache()xa_for_each()vgic_put_irq()xa_erase()GITS_CTLREnableLPIsSebbene le evasioni da guest a host siano rare, rappresentano la classe più pericolosa di bug dell'hypervisor perché infrangono la barriera di isolamento su cui si basa il cloud computing. Le precedenti evasioni KVM pubbliche riguardavano x86, di solito tramite QEMU o codice specifico per AMD . ITScape è il primo exploit funzionante a dimostrare un'evasione da una VM arm64 senza privilegi attraverso il codice KVM direttamente integrato nel kernel, senza bisogno di bug nell'emulatore userspace
.
Per i provider cloud che eseguono istanze Graviton, Ampere Altra o qualsiasi host KVM arm64 con carichi di lavoro multi-tenant, un guest può:
La maggior parte dei team di sicurezza ha valutato la vulnerabilità con un punteggio superiore a CVSS 9.0, a testimonianza della sua gravità critica .
Il codice vulnerabile si trova nel percorso di invalidazione della cache di traduzione LPI. Quando il kernel deve ripulire le voci della cache, itera attraverso l'XArray con xa_for_each() e chiama vgic_put_irq() per rilasciare il contatore di riferimento su ogni voce. Il problema è che xa_for_each() restituisce voci che potrebbero essere già state cancellate da un'operazione concorrente — come un comando DISCARD ITS emesso da una diversa vCPU. Il ciclo di invalidazione rilascia comunque il riferimento su quella voce già rimossa, causando un doppio rilascio e, in ultima analisi, un use-after-free
.
Una vulnerabilità precedente nello stesso codice, la CVE-2024-26598, aveva parzialmente risolto un UAF nel percorso di hit della cache di traduzione LPI, incrementando il refcount all'interno di vgic_its_check_cache() prima di rilasciare il lock. Quella correzione non copriva il percorso di invalidazione, lasciando la race condition sfruttabile attraverso una diversa sequenza di attivazione
.
La correzione upstream modifica vgic_its_invalidate_cache() in modo che vgic_put_irq() venga chiamata solo sul valore restituito da xa_erase(), e non su ogni voce toccata dall'iteratore. Il messaggio del commit recita: "KVM: arm64: vgic-its: Rilascia il riferimento della cache di traduzione solo per la voce cancellata"
.
Poiché xa_erase() rimuove atomicamente e restituisce la vecchia voce — o restituisce NULL se la voce era già stata eliminata — la correzione assicura che il contatore di riferimento venga decrementato esattamente una volta, eliminando la finestra di double-free. La patch è stata integrata nel kernel upstream all'inizio di giugno 2026 ed è stata rapidamente importata nella serie stabile 6.x intorno all'8-10 giugno 2026
. Le principali distribuzioni, tra cui Red Hat, SUSE e Debian, hanno rilasciato correzioni backportate per i loro rami kernel supportati
.
Hyunwoo Kim ha rilasciato pubblicamente un exploit funzionante su GitHub intorno al 9-10 giugno 2026. Il repository include il codice sorgente completo, istruzioni passo-passo per la riproduzione e una descrizione tecnica della tecnica di sfruttamento . L'exploit innesca la race condition coordinando thread vCPU che emettono simultaneamente comandi DISCARD e ricerche nella cache di traduzione LPI, centrando con precisione l'use-after-free per l'esecuzione di codice sull'host.
La disponibilità pubblica di un PoC affidabile significa che scanner di exploit standardizzati e veri aggressori possono armare la vulnerabilità con uno sforzo minimo, accorciando la finestra tra la divulgazione e gli attacchi attivi.
Se gestite un'infrastruttura KVM arm64 multi-tenant — AWS Graviton, Ampere Altra o qualsiasi piattaforma simile — considerate questa come un ciclo di patch di emergenza immediata.
Comments
0 comments