QEMU guest-to-host escapes recur in the same device models, because that is where guest-controlled data is parsed in the QEMU process, and because those models are reused by every KVM-based product, a QEMU bug tends to apply across libvirt, Proxmox, OpenStack, and cloud platforms. The clusters:
- Floppy controller (FDC): the VENOM out-of-bounds write in the fixed FIFO, present even with no floppy attached.
- Network adapters: rtl8139 transmit/offload and e1000 descriptor and offload handling have produced out-of-bounds reads and loops.
- Storage (AHCI, SCSI): AHCI command-list and PRD handling, and SCSI request parsing, with trusted-length transfer bugs.
- USB (XHCI, EHCI, UHCI): ring and device-context handling, with XHCI the modern hot spot.
- virtio family: descriptor-chain, indirect-descriptor, and per-device parsing across virtio-net/blk/scsi/gpu.
Using the pattern#
# fingerprint the QEMU version (decides which device bug applies)
qemu-system-x86_64 --version 2>/dev/null; virsh version 2>/dev/null
# from the guest, confirm which vulnerable models are present
lspci -nn; lsusb; cat /proc/ioports | grep -i fd # floppy present?
Fingerprint the QEMU version, confirm which device models the VM exposes, and match the version to the advisory for that device. Escapes are version-specific and generally need an information leak to defeat ASLR plus the memory-corruption primitive; the device model determines the primitive.
Exploitation notes#
- Device configuration decides the surface: the floppy and audio controllers are present by default on PC machine types, while virtio-gpu, specific USB controllers, and NIC models depend on the VM definition.
- Shared models mean cross-product relevance: an e1000 or XHCI bug in QEMU typically applies to any product that ships that QEMU, and the e1000 model is even shared in spirit with other hypervisors.
- The mechanisms are on the per-device pages under Guest-to-host escape; this page maps bug clusters to components.