
Problema di sicurezza nel firmware dell'hypervisor di alcuni chipset Qualcomm meno recenti.
CVE-2022-22063 è un problema di sicurezza nel firmware dell'hypervisor di alcuni chipset Qualcomm meno recenti. Un componente hardware non protetto (il "boot remapper") può essere abusato per ottenere accesso completo in lettura/scrittura all'hypervisor da un sistema operativo modificato (privilege escalation). Sfruttare il problema è banale sulle piattaforme interessate, poiché non è richiesta la conoscenza della specifica versione del firmware (ad es. indirizzi o variabili).
Nota: Sebbene Qualcomm abbia fornito correzioni ai clienti (con molto tempo a disposizione per rilasciare aggiornamenti), molti dispositivi interessati sono già piuttosto vecchi e potrebbero non ricevere la correzione dal produttore. Il problema può essere sfruttato solo da un sistema operativo modificato o compromesso (utilizzando un altro problema di sicurezza). Mantenere il sistema operativo aggiornato e sicuro potrebbe essere sufficiente anche se il firmware è vulnerabile.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HIl problema è stato pubblicato anche nel [Bollettino sulla sicurezza di Qualcomm di dicembre 2022].
Il problema dipende da una combinazione di hardware e software in esecuzione sul target interessato:
hyp della memoria interna).APCS_BOOT_START_ADDR_NSEC), che non è protetta dall'hypervisor ed è quindi accessibile dal kernel del sistema operativo meno privilegiato (ad es. Linux).Ci sono molti altri chipset che probabilmente hanno l'hardware interessato (ad es. MSM8909 e MSM8953), ma non dispongono di un firmware hypervisor separato che possa essere compromesso.
Privilege Escalation: Dato un kernel del sistema operativo già compromesso (ad es. Linux), il problema consente di elevare banalmente i privilegi al livello dell'hypervisor (EL1 -> EL2 su ARM). Tutta la memoria gestita dall'hypervisor può essere letta o scritta. Questo rompe l'isolamento dei diversi domini di sicurezza o delle macchine virtuali gestite dall'hypervisor (se presenti, a seconda della configurazione).
(Vedi anche: [Un'introduzione al controllo degli accessi sulle piattaforme Qualcomm Snapdragon])
Secure Boot: La maggior parte dei dispositivi Qualcomm disponibili in produzione utilizza il secure boot per impedire modifiche non autorizzate del firmware. Il firmware è firmato crittograficamente e verificato dalla catena di boot. Il problema consente di modificare o addirittura sostituire completamente il firmware dell'hypervisor caricato, in fase di esecuzione, da un sistema operativo modificato (sia tramite lo "sblocco del bootloader" ufficialmente supportato, sia tramite un altro exploit).
(Vedi anche: [Panoramica tecnica su Secure Boot e autenticazione delle immagini Qualcomm (v1.0)] e (v2.0))
Nota: Il problema è stato originariamente trovato sulla piattaforma Qualcomm Snapdragon 410 (MSM8916). Alcune delle spiegazioni seguenti potrebbero essere specifiche di MSM8916, ad es.:
Tuttavia, il concetto generale si applica in modo simile a tutte le piattaforme interessate.
L'architettura ARMv8-A a 64 bit definisce 4 livelli di privilegio ("exception levels", EL). Esistono livelli separati che vengono tipicamente utilizzati per le applicazioni, i kernel dei sistemi operativi e un hypervisor:
La CPU passa da un livello all'altro durante le eccezioni, ad esempio a causa di un interrupt in arrivo. È anche possibile passare da alcuni livelli usando istruzioni speciali, come la Hypervisor Call (hvc).
(Vedi anche: [Modello delle eccezioni AArch64])
L'hypervisor può ospitare una o più macchine virtuali con kernel di sistemi operativi separati. A ogni macchina virtuale può essere fornita una propria visione della memoria utilizzando la traduzione di stage 2. Tutti gli accessi alla memoria da una macchina virtuale passano attraverso due fasi di traduzione: la prima è gestita dal sistema operativo (virtuale), mentre la seconda è gestita dall'hypervisor. La memoria utilizzata dall'hypervisor o da altre macchine virtuali può essere nascosta omettendola dalle tabelle di traduzione.
(Vedi anche: [Virtualizzazione AArch64], [Gestione della memoria AArch64])
Il firmware dell'hypervisor di Qualcomm viene eseguito in EL2 e utilizza la traduzione di stage 2 per impedire l'accesso alla memoria dell'hypervisor dal kernel del sistema operativo principale in esecuzione in EL1 (di solito Linux). Si noti che in questa configurazione la traduzione di stage 2 è utilizzata principalmente per la protezione della memoria, senza traduzione degli indirizzi. Il sistema operativo principale ha accesso diretto alla maggior parte dei componenti hardware nello spazio di input/output mappato in memoria (MMIO), ad es. il controller SD o il sottosistema della fotocamera. L'accesso alla memoria che appartiene all'hypervisor/EL2 (hyp) e al secure monitor/EL3 (parte di tz) è limitato:
Il boot remapper non è correlato alla virtualizzazione: è necessario durante l'avvio iniziale di un core della CPU. Su questa piattaforma hardware i core della CPU iniziano sempre l'esecuzione all'indirizzo 0x0. Il boot remapper è un componente hardware aggiuntivo costruito attorno alla CPU che rimappa i primi 64 o 128 KiB (0x00000 - 0x20000) in una regione di memoria configurabile.
Per impostazione predefinita il boot remapper punta alla boot ROM (il primo codice che viene eseguito quando il dispositivo viene avviato). Successivamente la mappatura viene modificata in modo che gli altri core della CPU inizino immediatamente l'esecuzione nel firmware EL3 (parte di tz) caricato nella RAM:
Si noti come l'indirizzo a cui accede la CPU (all'interno di tz) sia accessibile utilizzando due diversi indirizzi fisici: l'indirizzo reale nella RAM (0x8650xxxx) e l'indirizzo rimappato tramite il boot remapper (0x0000xxxx).
Esistono in realtà due istanze separate del boot remapper: