A reachable assertion in QEMU’s USB handling (usb_ep_get in hw/net/core.c) can be triggered from an unprivileged guest and crash the host-side QEMU process, producing a host-level denial-of-service that administrators must treat as a high-availability risk and remediate immediately.
On 19 September 2024 a vulnerability was disclosed in QEMU described as an assertion failure in usb_ep_get, located in hw/net/core.c. The bug can be exercised from a guest and causes an assertion to trip when QEMU attempts to look up a USB endpoint, allowing a malicious or buggy unprivileged guest to crash the QEMU process that manages that VM. Public vulnerability trackers characterize the flaw as a reachable assertion (CWE‑617) with an availability impact; vendor/NVD entries record a medium severity rating and a CVSSv3 score reported around the mid‑5 range by several CNAs. This is an operational‑impact bug: it is not reported as a code‑execution or information‑disclosure vulnerability. The primary consequence is loss of availability — a crashed QEMU process can terminate the VM and potentially destabilize other management services on the host if not contained. Multiple vendor trackers and distro security pages list the issue, and distributions have been packaging fixes or backports on staggered timelines.
Source: MSRC Security Update Guide - Microsoft Security Response Center
Background / Overview
On 19 September 2024 a vulnerability was disclosed in QEMU described as an assertion failure in usb_ep_get, located in hw/net/core.c. The bug can be exercised from a guest and causes an assertion to trip when QEMU attempts to look up a USB endpoint, allowing a malicious or buggy unprivileged guest to crash the QEMU process that manages that VM. Public vulnerability trackers characterize the flaw as a reachable assertion (CWE‑617) with an availability impact; vendor/NVD entries record a medium severity rating and a CVSSv3 score reported around the mid‑5 range by several CNAs. This is an operational‑impact bug: it is not reported as a code‑execution or information‑disclosure vulnerability. The primary consequence is loss of availability — a crashed QEMU process can terminate the VM and potentially destabilize other management services on the host if not contained. Multiple vendor trackers and distro security pages list the issue, and distributions have been packaging fixes or backports on staggered timelines. Why this matters: availability, multi‑tenant risk, and reachability
- Attacker model: a guest‑side actor (e.g., a tenant or malicious user inside a virtual machine) or a non‑privileged process in the guest that can manipulate USB device state or descriptors can trigger the assertion. The attack vector is local to the guest and requires low privileges inside that guest to manipulate USB endpoint data.
- Impact class: the vulnerability is an availability issue. A successful exploit causes an assertion failure that terminates the QEMU process managing the guest, producing a denial‑of‑service condition for that VM and potentially forcing host intervention or a host reboot in poorly isolated environments.
- Why operators should care: any host running untrusted or semi‑trusted guests (cloud providers, multi‑tenant hosts, CI farms, public VPS providers) is at elevated risk because the vulnerability offers a reliable way for a guest to force a host‑side process crash. Similar fastpath/context bugs in virtualization stacks repeatedly show how a small reachable assertion can have outsized operational impact.
Technical anatomy: what the bug is, where it lives, and why it trips
The code path and the assertion
The defect is located in QEMU’s USB handling code, specifically the function usb_ep_get inside hw/net/core.c. That helper is used to find a USB endpoint structure for a device. Under certain malformed or unexpected USB descriptor states supplied by a guest or by emulated USB device behavior, the function encounters data that violates its internal assertion checks and triggers an assertion failure. When QEMU is built or run in environments where assertions are enabled or where the code path does not defensively handle the edge case, that assertion will abort the process, producing a crash. Vendor advisories and public CVE summaries describe the flaw as an assertion failure reachable from guest actions.Why an assertion crash matters in a hypervisor process
- Assertions in C code typically represent programmer assumptions about invariants. When those invariants can be violated by input controlled (or influenced) by a guest, an assertion becomes a reachable denial‑of‑service primitive.
- Because QEMU is the process that emulates hardware and manages VM devices, a crash of QEMU leads to VM termination, loss of in‑memory state, and possible interruption of higher‑level orchestration systems (libvirt, systemd units, container runtimes).
- This class of bug is not a memory‑corruption exploit (no public evidence of arbitrary code execution); it is a stability/robustness failure that must be addressed to preserve service availability.
Comparisons and context from virtualization incident patterns
Past virtualization bugs show a recurring pattern: micro‑optimizations and tight invariants (fastpaths, assertionized invariants) reduce code complexity or improve performance but increase the chance a malformed input can catastrophically break process invariants. That’s why robust defensive checks and conservative input validation at the hypervisor boundary are essential for multi‑tenant infrastructure.Affected products and vendor status
Multiple distribution security trackers and vendor advisories list QEMU and the qemu‑kvm packaging as affected. Public trackers show slightly different scoring and package‑status details; operators must consult their distribution security tracker and installed package metadata to determine exposure.- NVD / MITRE: describes the flaw and classifies it as an assertion failure that can result in denial‑of‑service. (See the CVE entry.
- Debian tracker: lists qemu packages in Debian releases (bullseye, bookworm, trixie, sid) as vulnerable in specific package versions and indicates where fixes have been applied or packages updated. Debian’s tracker includes bug references for triage and fixed package details.
- Ubuntu security notices: list the CVE with Medium priority and provide per‑release status notes where fixes are deferred/packaged. Administrators using Ubuntu should review their qemu package status in the distro security tracker.
- Amazon Linux / ALAS: records the CVE and shows patched package references for affected ALAS releases; different Linux distributions can report slightly different CVSS base scores (e.g., ALAS lists a CVSSv3 4.7 rating for their packaged assessment). This discrepancy underscores why administrators should rely on their distro’s advisory rather than a universal score.
- SUSE / Red Hat / SUSE advisories: SUSE and Red Hat trackers also document the issue and remediation status for their builds; some vendors list corrected packages or remark on resolution state.
Exploitability, proof‑of‑concepts, and public evidence
- As of public advisories and the aggregated trackers, there is no authoritative public proof‑of‑concept (PoC) widely circulated showing remote or automated exploitation beyond the defined guest‑local vector. Multiple trackers note the absence of PoC while flagging the availability risk. Administrators should treat the lack of a PoC as reassuring about the weaponization difficulty, but not as a reason to delay patching in exposed environments.
- The attacker model (guest executes operations that lead QEMU to see malformed USB endpoint data) is realistic in multi‑tenant clouds or any environment that runs untrusted guests and allows USB device passthrough or emulated USB stacks accessible to the guest.
- Exploitation complexity is low to moderate: the bug is reachable from guest input and requires no host privileges, but successful exploitation requires understanding how to trigger the relevant usb_ep_get code path. That capability is within reach of an attacker controlling a guest OS or a malicious user inside a guest that can emulate or present USB state.
Detection and indicators of compromise
Because this is an assertion failure that kills the QEMU process, detection is primarily operational and log‑based:- Kernel / system logs showing abrupt QEMU process termination or segfault/abort messages for qemu-system-* or qemu-kvm processes.
- Orchestration logs (libvirt, systemd) showing QEMU crashes, repeated VM restarts, or VM core dumps.
- Guest telemetry: if many guests show repeated terminations of the same host’s QEMU process, correlate with which guests use USB passthrough or host USB devices.
- Post‑crash artifacts: backtraces or coredumps from QEMU that reference usb_ep_get or hw/net/core.c are strong signals that this specific code path was hit.
- Inspect syslog / journal for QEMU crashes: journalctl -u libvirtd --since "24 hours" and journalctl -k or dmesg for process abort/segfault entries.
- Search QEMU logs for calls referencing USB device/endpoint errors or assertion traces.
- Correlate VM activity with host process crashes: track which guests were active with USB passthrough when QEMU died.
Immediate mitigations and workarounds (before you can patch)
If you cannot immediately install a vendor patch, apply layered mitigations to reduce attack surface and blast radius:- Disable USB passthrough / USB device emulation for untrusted guests. Reconfigure VM definitions to avoid attaching USB host devices or the USB controller unless necessary.
- Isolate risky workloads: move untrusted or potentially malicious guests off vulnerable hosts and onto patched hosts or hosts with USB passthrough disabled.
- Limit guest capabilities: remove or restrict userland mechanisms inside guests that can present or emulate USB devices, if possible in your environment.
- Harden process supervision: run QEMU under a supervised environment and ensure core dumps and logs are captured for forensic review when a crash occurs.
- QoS and scheduling choices: if using cloud or orchestration, avoid scheduling multiple critical tenants on the same unpatched hypervisor host; use maintenance windows to batch updates and reboots.
How to verify a patch and rollout recommendations
- Identify exposed hosts and packages: query your fleet for qemu/qemu‑kvm package versions (e.g., rpm -q qemu qemu-kvm or dpkg -l | grep qemu) and map them to vendor advisories. Debian, Ubuntu, SUSE, Red Hat, and Amazon Linux trackers publish which package versions are fixed — consult your vendor’s advisory for your distro.
- Obtain patched packages: use your distribution’s package manager to retrieve the vendor‑built fixes or the backport. Do not rely on upstream source alone if you need vendor‑packaged fixes and support.
- Test in staging: validate the patched package in a staging environment with representative USB device configurations and your standard VM orchestration workflows (live migration, snapshots, backups).
- Staged rollout: deploy in waves (pilot → production) monitoring for regressions. Keep rollback plans ready.
- Post‑deploy validation: verify that previous activation scenarios that produced crashes no longer cause QEMU to abort. Monitor logs for 7–14 days after rollout for regressions or latent issues.
- Check qemu package versions: rpm -q qemu qemu-kvm OR dpkg -l | grep qemu
- Inspect package changelog for CVE references: rpm -q --changelog qemu | grep -i 2024-8354 or apt changelog qemu-system-x86 | grep -i 2024-8354
- Confirm host boot and VM functionality after kernel / qemu package upgrade.
Risk assessment and prioritization
- Highest priority: shared hypervisor hosts that run untrusted guests (cloud providers, hosting providers, multi‑tenant virtualization clusters). In these contexts a single guest can be used to intentionally degrade host availability.
- High priority: development CI, build farm and lab hosts that run external or vendor-provided guest images.
- Lower priority (but still recommended): single‑user desktop hosts running trusted VMs — risk is reduced if guests are fully trusted, but patching remains best practice.
Longer‑term engineering lessons
- Defensive programming: hypervisor code that parses or processes guest‑supplied device descriptors must not rely on assertions for correctness at the boundary; assertions are useful during development but must be accompanied by robust runtime validation when input is guest‑controlled.
- Fuzzing and test coverage: USB and other device stacks benefit from targeted fuzzing and negative‑test coverage that exercises malformed descriptors, edge cases and boundary conditions; this vulnerability underlines the importance of such testing on code paths reachable from guests.
- Operational controls: enforce strict controls on device pass‑through, require operator approval for attaching host devices to VMs, and treat device passthrough as a sensitive privilege in multi‑tenant environments.
Practical checklist for administrators (summary)
- 1. Inventory: find all hosts running QEMU/qemu‑kvm and list installed package versions. (rpm/dpkg).
- 2. Consult your distribution’s CVE advisory and the package changelog for the fixed build for CVE‑2024‑8354.
- 3. If a fixed package is available, schedule and apply the vendor update; reboot or restart QEMU-managed VMs as required.
- 4. If you cannot patch immediately:
- Disable USB passthrough for untrusted guests.
- Move untrusted tenants to patched hosts.
- Increase logging and enable process supervision for QEMU.
- 5. Monitor logs for QEMU crashes and assertion traces; preserve coredumps and logs for forensic analysis if a crash occurs.
Closing analysis and cautionary notes
CVE‑2024‑8354 is an example of how small logic or validation gaps at the emulation boundary can become operationally significant. The public record consistently describes it as an assertion failure reachable from a guest that leads to QEMU process termination and an availability impact; distribution trackers and vendor advisories confirm the affected package lists and the expected remediation path (vendor patches and backports). Administrators should prioritize patching hosts that run untrusted or multi‑tenant workloads and apply the practical mitigations described above while awaiting vendor package rollouts. A final caution: publicly available trackers do not document a stable, weaponized PoC for remote exploitation beyond the guest‑local vector. That does not reduce the urgency of remediation in multi‑tenant contexts; a malicious guest with the ability to trigger USB endpoint lookups is sufficient to cause service disruption. Operators must treat this as a live availability risk and respond with triage, mitigation, and patching according to their operational criticality and exposure profile.Source: MSRC Security Update Guide - Microsoft Security Response Center