Vulnerabilità nel codice KVM specifico per CPU AMD, che consente di eseguire codice al di fuori del sistema guest

I ricercatori del team Google Project Zero hanno identificato una vulnerabilità (CVE-2021-29657) nell'ipervisor KVM fornito con il kernel Linux, che consente di bypassare l'isolamento del sistema guest ed eseguire codice nell'ambiente host. Il problema è presente nel codice utilizzato su sistemi con processori AMD (modulo kvm-amd.ko) e non si manifesta su processori Intel.

I ricercatori hanno preparato un prototipo funzionante di exploit, che consente di avviare una shell root nell'ambiente host da un ambiente guest su un sistema con processore AMD Epyc 7351P e kernel Linux 5.10. Si segnala che si tratta della prima falla di tipo 'guest-to-host' nell'ipervisor stesso KVM, non correlata a errori nei componenti eseguiti nello spazio utente, come QEMU. La correzione è stata accettata nel kernel a fine marzo. Il problema si manifesta a partire dal kernel Linux 5.10-rc1 e fino a v5.12-rc6, cioè riguarda solo i kernel 5.10 e 5.11 (la maggior parte dei rami stabili delle distribuzioni non è stata influenzata dal problema).

Il problema è presente nel meccanismo nested_svm_vmrun, implementato utilizzando l'estensione AMD SVM (Secure Virtual Machine) e che consente di organizzare l'esecuzione annidata di sistemi guest. Per realizzare correttamente questa funzionalità, l'ipervisor deve intercettare tutte le istruzioni SVM eseguite nei sistemi guest, emulare il loro comportamento e sincronizzare lo stato con l'hardware, il che rappresenta un compito piuttosto complesso. Analizzando l'implementazione proposta in KVM, i ricercatori hanno trovato un errore logico che consente di influenzare il contenuto dei registri MSR (Model-Specific Register) dell'host dal sistema guest, che può essere utilizzato per eseguire codice a livello di host.

In particolare, l'esecuzione dell'operazione VMRUN da un sistema guest di secondo livello (L2, avviato da un altro sistema guest) porta a una seconda chiamata a nested_svm_vmrun e alla corruzione della struttura svm->nested.hsave, sulla quale sono sovrapposti dati dal vmcb del sistema guest L2. Di conseguenza, si viene a creare una situazione in cui, a livello del sistema guest L2, è possibile liberare la memoria nella struttura svm->nested.msrpm, in cui è memorizzato il bit MSR, nonostante continui a essere utilizzato, e ottenere accesso agli MSR dell'ambiente host.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster