Spokes.wiki Search About
Created
Updated

Hypervisor isolation (and what it costs to be useful)

The boundary a virtual machine is supposed to put between untrusted guest code and the host. This spoke acquires it as a defensive control that was measured and found to depend entirely on its configuration, from vms-wont-contain-agents.

The bargain

A VM is isolated by construction and useful by exception. To be worth running it must share resources, expose devices, carry a network stack and talk to the host kernel — and every one of those is the attack surface. So "is a VM secure" is not a question about virtualisation; it is a question about how much surface this particular VM exposes, and the answer differs by orders of magnitude between products built for the same nominal job.

The two ends of that range, both tested on the same host against the same agent:

QEMU/KVM (general purpose) firecracker (microVM)
Device model full emulated platform — display, queues, VAPIC, USB minimal: block, net, serial, a few more
Guest network libslirp user-mode stack in userspace host-side, far smaller surface
Result under test escaped three times not escaped — but hard-locked the host via kernel flaws

Availability is the part that failed on both sides. A guest that cannot escape can still take the machine down.

Why an agent changes the calculation

Not because it finds a class of bug a human could not. Because it pays the price a human would not: twelve hours of reading kernel and library source, building minimal reproducers, writing oracles, backtracking from dead ends, and chaining four separate flaws — three of them unknown at the time — into one working escape. Hypervisor escape has always been possible and has always been expensive. The finding is that the expense collapsed, and the surface did not shrink to match.

Two consequences follow, and neither is about virtualisation:

Patch latency became an exploit primitive. One escape used a fix that existed upstream and had not reached the stable distribution; another combined an unassigned bug-fix commit with a known CVE in an older package. An agent that reads the commit fixing a bug does not need the advisory, the PoC or the write-up, so the window between upstream fix and distribution backport is now directly attackable. See system-hardening; the practical form of the rule is that older stable distributions should be assumed vulnerable.

Time-boxing is the control that matches the threat. Of Trail of Bits' recommendations — minimal-surface virtualisation, least privilege, monitoring, pristine per-run environments, limited runtime — only the last one attacks the attacker's actual advantage. Everything else shrinks the surface; this one shrinks the budget.

Where it sits

The other side of ../platform-ops-wiki's compute-sandbox, which describes the same object as a production substrate — ephemeral, untrusted, bursty — and names its own open hole: "it does not have an incident, a postmortem, or a neutral measurement… what escapes the isolation." This is that measurement, arriving from the defensive side rather than the operational one. Sandboxes as products to rent are ../cloud-wiki's; containment for a harness's agent is ../agentic-tooling-wiki's; the boundary as a defensive control, and whether it holds, is here.

What this corpus cannot say

  • Whether the QEMU/KVM result reproduces. One run, one host, one model.
  • Whether firecracker holds under a longer run. Its author says the test was incomplete.
  • Anything about container isolation, gVisor, Kata, or hardware-enforced enclaves — none is in the corpus, and a page about isolation that only knows two hypervisors should say so.

vms-wont-contain-agents · infoq-agent-vm-escape · firecracker · system-hardening · compute-sandbox · exploitgym · zero-trust · defensive-security · synthesis