Home/ Blog/ Security news/ Article
Blog · Security news

A guest virtual machine can read its host's memory through a flaw in QEMU's built-in networking

A patched flaw in libslirp, QEMU's usermode networking, lets a privileged guest virtual machine read gigabytes of host memory. Update to libslirp 4.9.2 now.

Light leaking through a crack in the wall between two stacked virtual machine servers

The promise of a virtual machine is a wall. Whatever happens inside the guest stays inside the guest, and the host underneath is off limits. A flaw disclosed today in libslirp, the small networking library that QEMU uses by default to give guests internet access, puts a crack in that wall. A privileged guest can read gigabytes of the host process's memory, one crafted network packet at a time.

It is tracked as CVE-2026-9539, rated 6.5 out of 10, and it is already fixed: libslirp 4.9.2 closes it. The interesting part is not the score. It is where this library actually runs, and why the one precondition that keeps the score down is satisfied by default in exactly those places.

What the flaw is, in plain terms

QEMU is the open-source engine behind a huge amount of virtualization, from Linux KVM hosts to developer laptops. When you start a guest without configuring a network, QEMU hands it a simple software network called slirp (short for the old serial-line internet protocol library). Slirp pretends to be a router so the guest can reach the outside world, and it does that entirely in user space, inside the QEMU process on the host.

The bug lives in how slirp handles TCP urgent data, an old corner of the protocol that lets a sender mark some bytes as needing priority. The function that copies those urgent bytes, sosendoob, miscalculates a length when the guest sends segments with a manipulated urgent pointer. That miscalculation underflows into a very large number, and slirp then reads far past the end of its buffer. According to the advisory from STAR Labs, who found and reported it, the result is an out-of-bounds heap read that leaks "gigabytes of sensitive host-process heap memory" back toward the attacker. That heap belongs to the QEMU process on the host, not to the guest. Whatever QEMU is holding in memory, including data from other parts of the host, can ride out through this channel.

One honest caveat that the researchers state plainly: the attacker needs to be privileged inside the guest, either root or holding the CAP_NET_RAW capability, to craft the raw packets. On paper that sounds like a high bar. In practice it is not, and here is why.

Where slirp actually runs, and why that matters

This is the part the severity score does not capture. Multi-tenant production clouds rarely use slirp at all. They wire guests to the host with tap devices and virtio or vhost networking for speed, so the vulnerable code is not even loaded. If your mental model of "VM" is a fleet of cloud instances, this flaw mostly misses you.

Slirp lives somewhere else: the places people forget are virtualization. It is the default for throwaway development VMs, for continuous-integration runners that spin up a fresh guest per job, for desktop tools like GNOME Boxes, and for sandboxes that run untrusted code inside a quick QEMU guest. It is also embedded by libraries beyond QEMU, including slirp4netns, the component that gives rootless Podman and Docker containers their network. If you run any of those, check the libslirp version they bundle, because the vulnerable function ships with the library, not with the product on top of it.

Now put the precondition back. The flaw needs root inside the guest. In a CI runner or a malware sandbox, the workload already has root in the guest by design, because it is the user's own disposable machine or the very sample you are detonating. The protection that lowers this CVE to a medium is exactly the protection that is missing in the deployment model where slirp is most common. A failed-shut control is only a control when something holds it shut.

Why an information leak is worse than it sounds here

It is tempting to file a read-only bug under "not urgent." Two things argue against that. First, the official severity vector marks the scope as changed: the guest reaches data outside its own boundary, which is the entire point of a hypervisor and the one property you are paying for. Second, the volume is not a few stray bytes. Leaking gigabytes of the host process's heap is enough to harvest secrets that happen to be resident, from TLS key material to other tenants' buffered traffic, depending on what that QEMU process has touched. A confidentiality break across the isolation line is not a footnote. It is the wall doing the opposite of its job.

Find every host running libslirp below 4.9.2

The fix is a version bump, but the work is inventory, because libslirp hides inside other software.

  • Patch the library, not just QEMU. Update libslirp to 4.9.2 or later (distributions such as Arch already ship 4.9.3). On most Linux hosts this is a package update for libslirp or slirp; apply your distribution's advisory as it lands.
  • Rebuild anything that statically links it. Container images, appliance builds, and tools that vendor their own copy of libslirp will not pick up the host package. Check the bundled version in slirp4netns and in any custom QEMU build.
  • Restart the guests. The fixed code only takes effect for QEMU processes started after the update, so long-running VMs keep the vulnerable library mapped until they are restarted.
  • Prioritize the sandboxes and CI fleet. Those are the environments that both use slirp and hand the attacker the in-guest privilege the flaw requires. Patch them before the developer-laptop tail.

This is the kind of exposure that an installed-package vulnerability sweep across your fleet is built to surface: every host whose libslirp is below 4.9.2, mapped to the QEMU and container workloads that depend on it. There is no clean runtime signature to alert on, because a successful read does not have to crash anything. The reliable signal is the version on disk, not the packet on the wire, so treat this as a find-and-update job rather than a detection-rule job.

Being a medium-severity, read-only flaw, this one will not dominate headlines. But isolation is the product you bought when you chose a virtual machine, and a guest that can read its host's heap is a quiet failure of exactly that product. Update libslirp, restart the guests, and start with the machines you trust the least.

Frequently asked questions

What is CVE-2026-9539 and how serious is it?

It is an out-of-bounds heap read in libslirp, the usermode networking library QEMU uses by default, rated 6.5 out of 10. A privileged guest virtual machine can send crafted TCP packets that make the host leak gigabytes of its own process memory back to the guest. It is an information disclosure flaw, not remote code execution, but it crosses the isolation boundary a hypervisor is supposed to enforce.

Which versions are affected and what is the fix?

Every libslirp release before 4.9.2 is affected. The fix is libslirp 4.9.2 or later; some distributions already ship 4.9.3. Update the system package, rebuild any software that bundles its own copy of libslirp, and restart running QEMU guests so they map the patched library.

Does this affect my production cloud VMs?

Usually not directly. Multi-tenant clouds typically connect guests with tap and virtio or vhost networking, which does not use the vulnerable slirp code. The real exposure is developer VMs, continuous-integration runners, desktop virtualization, sandboxes, and rootless containers that use slirp4netns. Check the libslirp version those environments actually run.

Why does it matter if the attacker already needs root in the guest?

Because in the environments where slirp is common, the workload already has root in the guest by design. A CI job or a malware sandbox runs as a disposable virtual machine the user controls. So the precondition that lowers the severity score is satisfied automatically exactly where the library is used most, which is why the patch should be prioritized for those hosts.

How do I detect exploitation of this flaw?

You largely cannot detect it at runtime. The flaw is a memory read that does not have to crash QEMU or leave an obvious network signature. The dependable signal is the installed version, so treat this as a find-and-patch job: inventory every host and image for libslirp below 4.9.2 and update them, rather than trying to write a detection rule.

Ready to meet the Guardians?

Deploys fast - agentless for monitoring and cloud, a lightweight agent for deep endpoint security. Just Suriq, standing watch.