
Demostración de CVE-2021-3656, una vulnerabilidad de virtualización anidada de KVM que permite a un invitado L2 eludir las intercepciones VMLOAD/VMSAVE y leer/escribir la memoria física del host. Incluye una guía de configuración para pruebas.
CVE-2021-3656:
Este problema es causado por la falta de validación del campo virt_ext del VMCB y permite que un invitado L1 malicioso deshabilite tanto las interceptaciones de VMLOAD/VMSAVE como el VLS (Virtual VMLOAD/VMSAVE) para el invitado L2. Bajo estas circunstancias, el invitado L2 puede ejecutar VMLOAD/VMSAVE sin interceptación y, por lo tanto, leer/escribir partes de la memoria física del host.
Configuración del entorno para acceder al kernel de Linux:
Puedes usar un contenedor Docker o una máquina virtual. Haré lo posible con un contenedor Docker.
Necesitas tener Docker Desktop configurado en MAC o Windows. Si tienes una máquina Linux por defecto, puedes ignorar todos estos pasos.
A continuación, debes extraer una imagen de ubuntu desde: ubuntu - Official Image | Docker Hub
a. En Windows puedes escribir "docker pull ubuntu" en PowerShell o CMD
b. Lo mismo para MAC i. Nota: Esto descargará la última versión de ubuntu. Quizás quieras descargar una versión anterior para tener una versión más antigua de su kernel. ii. Crea un directorio con un Dockerfile. El archivo como mínimo debe tener: "FROM ubuntu:16.04" iii. Para obtener una versión anterior escribe: "docker build -t ubuntu-xenial" por ejemplo iv. Para ver tus imágenes actuales escribe: "docker image ls"
c. Una vez que ejecutes el comando del paso iii, el sistema te proporcionará un ID de contenedor. i. Puedes verificar con "docker container ls" para asegurarte de que el contenedor esté disponible
d. Para acceder a este contenedor, escribe: "docker exec -it "
e. Ahora deberías estar dentro de tu contenedor en el directorio "/"
f. Este exploit fue encontrado en la versión del kernel 4.13; debemos asegurarnos de que esa sea la versión que está ejecutando nuestro entorno de trabajo. i. Para verificar escribe: uname -r
g. Desde aquí, encuentra el directorio del kernel escribiendo: "cd sys/kernel"
h. Desde aquí no avancé mucho porque no encontré la forma de degradar a la versión 4.13 del kernel.
i. También intenté degradar usando máquinas virtuales, pero tampoco funcionó.
REFERENCIAS:
● oss-security - ○ Esta es una visión general de dos vulnerabilidades encontradas en el código AMD de KVM para la virtualización anidada soportada.
● Este es el PATCH: kvm/kvm.git - kernel-based virtual machine - kvm
● KVM: SVM: Enable Virtual VMLOAD VMSAVE feature · torvalds/linux@89c8a49 (github.com) ○ Este es el código vulnerable.
● CVE-2021-3656- Red Hat Customer Portal ○ Descripción del exploit por Red Hat.
● What is KVM? (redhat.com) ○ Explicación de qué es un KVM.
● Artículos/vídeos sobre cómo degradar el kernel de 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) ○ Necesitas tener KVM para este exploit.
● How To Install Linux Kernel 4.13 In Ubuntu And Linux Mint? (fossbytes.com) ○ Cómo instalar el kernel de Linux 4.13.