
CVE-2021-3929 および CVE-2021-3947 の VM エスケープ PoC です。教育目的のみで使用してください。
詳細は ホワイトペーパー をご覧ください。
OS: Ubuntu 21.10
Linux: 5.13.0
gcc: 11.2.0
glibc: 2.34
glib: 2.68.4
QEMU: 6.1.0
ゲストOS: Ubuntu 21.04
qemu-system-x86_64 run -machine type=q35,accel=kvm -cpu host \
-m 2G -hda /home/qiuhao/VMs_QEMU/ubuntu21.04/ubuntu21.04.qcow2 \
-device nvme,drive=disk0,serial=1234,cmb_size_mb=64 \
-drive file=null-co://,if=none,format=raw,id=disk0 \
-device ich9-intel-hda -vga qxl -device virtio-serial-pci \
-spice port=5900,disable-ticketing=on \
-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
-chardev spicevmc,id=spicechannel0,name=vdagent
# Disable NVMe's Driver
echo "install nvme /bin/true" | sudo tee -a /etc/modprobe.d/blacklist.conf
sudo update-initramfs -u
sudo reboot
# 最初に exp.c 内のハードコードされた定数を調整してください。
# QEMU を --enable-debug でコンパイルする場合は、gcc に -DCONFIG_DEBUG_MUTEX を追加してください。
gcc -o exp exp.c
sudo ./exp
# VM エスケープ
exp がゲスト RAM アドレスのリークに失敗した場合は、QEMU を再起動して再試行してください。
QEMU コミュニティと Red Hat 製品セキュリティチームの専門的な対応に感謝します。