
Dimostrazione di CVE-2021-3656, una vulnerabilità di virtualizzazione annidata KVM che consente a un guest L2 di bypassare gli intercept VMLOAD/VMSAVE e leggere/scrivere la memoria fisica dell'host. Include una guida all'installazione per il test.
CVE-2021-3656:
Questo problema è causato dalla mancanza di validazione del campo virt_ext del VMCB
e consente a un guest L1 malintenzionato di disabilitare sia gli intercept di VMLOAD/VMSAVE
che VLS (Virtual VMLOAD/VMSAVE) per il guest L2. In queste
circostanze, il guest L2 è in grado di eseguire VMLOAD/VMSAVE
senza essere intercettato, e quindi leggere/scrivere porzioni della memoria fisica
dell'host.
Configurazione dell'ambiente per accedere al kernel Linux:
Puoi utilizzare un contenitore Docker o una macchina virtuale. Farò del mio meglio con un contenitore docker
Vuoi avere Docker Desktop configurato su MAC o Windows. Se hai una macchina Linux per impostazione predefinita, puoi ignorare tutti questi passaggi.
Successivamente vuoi estrarre un'immagine ubuntu da: ubuntu - Official Image | Docker Hub
a. Per Windows puoi digitare "docker pull ubuntu" in PowerShell o CMD
b. Stessa cosa per MAC i. Nota: Questo estrarrà l'ultima versione di ubuntu. Potresti voler estrarre una versione più vecchia per avere una versione più vecchia del suo kernel ii. Crea una directory con un Dockerfile al suo interno. Il file, come minimo, deve avere: "From ubuntu:16.04" iii. Per ottenere una versione più vecchia digita: "docker build -t ubuntu-xenial" per esempio iv. Per controllare le tue immagini attuali digita: "docker image ls"
c. Una volta eseguito il comando del punto iii, il sistema ti fornirà un ID contenitore. i. Puoi controllare "docker container ls" per assicurarti che il contenitore sia disponibile
d. Salendo per accedere a questo contenitore dovrai digitare: "docker exec -it "
e. Ora dovresti essere nel tuo contenitore nella directory "/"
f. Questo exploit è stato trovato nella versione 4.13 del kernel; dobbiamo assicurarci che sia la versione che il nostro ambiente di lavoro sta eseguendo i. Per controllare digita: uname -r
g. Da qui trovi la directory del kernel digitando: "cd sys/kernel"
h. Da qui non ho fatto molti progressi poiché non sono riuscito a trovare un modo per eseguire il downgrade al kernel 4.13
i. Ho anche provato a eseguire il downgrade usando macchine virtuali, ma non ha funzionato neanche
RIFERIMENTI:
● oss-security - [CVE-2021-3653, CVE-2021-3656] SVM nested virtualization issues in KVM (openwall.com) ○ Questa è una panoramica di due vulnerabilità trovate nel codice AMD di KVM per la virtualizzazione annidata supportata
● Questa è la PATCH: kvm/kvm.git - kernel-based virtual machine - kvm
● KVM: SVM: Enable Virtual VMLOAD VMSAVE feature · torvalds/linux@89c8a49 (github.com) ○ Questo è il codice vulnerabile
● CVE-2021-3656- Red Hat Customer Portal ○ Descrizione dell'exploit da Red Hat
● 1983988 – (CVE-2021-3656) CVE-2021-3656 kernel: SVM nested virtualization issue in KVM (VMLOAD/VMSAVE) (redhat.com)
● What is KVM? (redhat.com) ○ Spiegazione su cos'è un KVM
● Articoli/video su come eseguire il downgrade del kernel Linux
○ How to Downgrade the Kernel in Linux - Make Tech Easier ○ How to Downgrade from WSL Version 2 to WSL Version 1 - MSSQL DBA Blog (peter-whyte.com) ○ Linux Series - 2.1.5 Upgrading/Downgrading the Linux Kernel - YouTube
● How to check KVM is installed in Ubuntu Linux - Linux Shout (how2shout.com) ○ È necessario avere KVM per questo exploit
● How To Install Linux Kernel 4.13 In Ubuntu And Linux Mint? (fossbytes.com) ○ Come installare il kernel Linux 4.13