
Демонстрация CVE-2021-3656, уязвимости вложенной виртуализации KVM, позволяющей гостю L2 обходить перехваты VMLOAD/VMSAVE и читать/записывать физическую память хоста. Включает руководство по настройке для тестирования.
CVE-2021-3656:
Эта проблема вызвана отсутствием проверки поля virt_ext VMCB
и позволяет вредоносному гостю L1 отключить как перехват VMLOAD/VMSAVE,
так и VLS (Virtual VMLOAD/VMSAVE) для гостя L2. В этих
обстоятельствах гость L2 может выполнять VMLOAD/VMSAVE
без перехвата, и таким образом читать/записывать части физической памяти
хоста.
Настройка окружения для доступа к ядру Linux:
Можно использовать Docker-контейнер или виртуальную машину. Я постараюсь обойтись Docker-контейнером.
Вам потребуется настроить Docker Desktop на Mac или Windows. Если у вас уже есть машина с Linux, можно пропустить эти шаги.
Затем нужно скачать образ Ubuntu из: ubuntu - Official Image | Docker Hub
a. Для Windows введите «docker pull ubuntu» в PowerShell или CMD
b. То же самое для Mac i. Примечание: будет загружена последняя версия Ubuntu. Возможно, вам понадобится более старая версия, чтобы получить старое ядро. ii. Создайте каталог с Dockerfile. Минимальное содержимое файла: «From ubuntu:16.04» iii. Для получения старой версии введите, например: «docker build -t ubuntu-xenial» iv. Чтобы проверить текущие образы, введите: «docker image ls»
c. После выполнения команды из шага iii система выдаст ID контейнера. i. Выполните «docker container ls», чтобы убедиться, что контейнер доступен.
d. Чтобы получить доступ к этому контейнеру, введите: «docker exec -it »
e. Теперь вы должны оказаться в контейнере в каталоге «/»
f. Эта эксплойта была найдена в версии ядра 4.13; нужно убедиться, что в вашей среде используется именно эта версия. i. Для проверки введите: uname -r
g. Затем найдите каталог ядра командой: «cd sys/kernel»
h. После этого я не продвинулся далеко, так как не смог найти способ понизить версию до ядра 4.13.
i. Я также пробовал понизить версию с помощью виртуальных машин, но это тоже не сработало.
ССЫЛКИ:
● oss-security - [CVE-2021-3653, CVE-2021-3656] SVM nested virtualization issues in KVM (openwall.com) ○ Это обзор двух уязвимостей, найденных в AMD-коде KVM для поддержки вложенной виртуализации.
● Это ПАТЧ: kvm/kvm.git - kernel-based virtual machine - kvm
● KVM: SVM: Enable Virtual VMLOAD VMSAVE feature · torvalds/linux@89c8a49 (github.com) ○ Это уязвимый код.
● RHSA-2021:3676 - Security Advisory - Red Hat Customer Portal
● CVE-2021-3656- Red Hat Customer Portal ○ Описание эксплойта от 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) ○ Объяснение, что такое KVM.
● How to Check Linux Kernel Version in Command Line (4 Easy Options) (phoenixnap.com)
● Статьи/видео о понижении версии ядра 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) ○ Для этого эксплойта требуется KVM.
● How to install QEMU/KVM on Ubuntu 22.04 | 20.04 LTS - Linux Shout (how2shout.com)
● How To Install Linux Kernel 4.13 In Ubuntu And Linux Mint? (fossbytes.com) ○ Как установить ядро Linux 4.13.