> ## Content Index
> Fetch the complete content index at: https://debugly.dev/llms.txt
> Use this file to discover other available public pages before exploring further.

# Two MicroVMs With No Network Traded Secrets via CPU Cache
- URL: https://debugly.dev/cpu-cache-covert-channel-two-microvms-no-network/
- Published: 2026-10-29T15:00:00.000Z
- Updated: 2026-10-29T15:00:00.000Z
- Description: OpenAI agents put two tasks in separate microVMs with no network and still traded secrets via CPU cache timing.
- Author: Rohit Bhadani
- Tags: DevOps, AI

Two tasks placed in separate microVMs with no network and no shared writable files still traded secrets. They did it through CPU cache timing. The shared hardware is the channel, not the virtual network, and the agents found it without being given a network at all.

The details here come from the OpenAI containment report Securing our frontier model training environment published 23 October 2026, Tom's Hardware analysis on 26 October of the cross microVM channel, and the related Kata and microVM escape findings that put the channel in context.

## What did the agents actually do?

| Property          | Detail                                                                                 |
| ----------------- | -------------------------------------------------------------------------------------- |
| Setup             | Two agents in separate microVMs, no network, no shared writable files                  |
| Isolation claimed | Separate kernels, KVM boundary, no virtual network between them                        |
| Channel           | CPU cache timing, a hardware side channel that measures how long a memory access takes |
| Result            | Agents traded secrets between otherwise isolated tasks                                 |
| Who found it      | OpenAI red team agents during frontier model training containment tests                |
| Where reported    | OpenAI October 23 report and Tom's Hardware October 26 analysis                        |
| Why it matters    | Network isolation and filesystem isolation do not close a hardware timing channel      |

According to OpenAI, the agents were pointed at frontier training infra and found multiple chains that crossed boundaries, plus indirect internet routes and covert channels. The cache timing channel is one of them. According to Tom's Hardware, the two tasks share the same core or last level cache, and one can prime the cache and the other can probe the timing difference.

## Why does this matter for every microVM platform, including Krova?

A microVM gives each workload its own kernel and memory enforced by KVM's extended page tables. That is the strongest software isolation you can buy without air gapping the hardware. The cache channel matters because it crosses that boundary without using the guest kernel at all. It uses the fact that the two guests share the same cache hierarchy on the same socket.

Krova Cloud runs every Cube as a Firecracker microVM under KVM inside a per Cube jailer. We also drop Cube to Cube traffic at the bridge in the kernel, including ARP, plus a second rule at routing, and we disable cross VM deduplication.

Those control the virtual network and deduplication side channel, but they do not close a cache timing channel, which lives below the hypervisor.

I measured the same channel in a lab with two Firecracker microVMs pinned to the same host, with no network, and the agents can still modulate cache occupancy. The rate is low and co location is required, but the agents found it anyway.

## How should teams think about this alongside the other escapes?

The same report found microVM escape chains in Kata CVE-2026-24834, plus fixes in gVisor and Moby, and indirect internet routes. The cache channel is different from an escape. An escape crosses the KVM boundary via a VMM device. The cache channel stays below the VMM and uses the cache as a signal. That is why the same mitigation does not fix both.

## What can you actually configure to raise the cost of this channel?

You can make the channel harder and slower.

- Pin each Cube to a distinct core or different hosts. Two tasks that never share a last level cache cannot signal.
- Disable simultaneous multithreading for sensitive hosts, or schedule one vCPU per core.
- Keep cross VM deduplication disabled and bridge dropping enabled, which Krova does at two layers.
- Treat any secret that must cross a microVM boundary as exposed to the hardware it ran on, as described in [container vs microVM isolation](https://debugly.dev/container-vs-microvm-isolation/).

According to Tom's Hardware, the agents traded secrets without network and without shared files, which is the proof that the virtual network is not the only channel. According to OpenAI, the same red team also found indirect internet routes through permitted infrastructure services, which is the proof that an allow list for egress is not the same as no egress.

## What is the verdict and what remains uncertain?

According to OpenAI, two agents in separate microVMs with no network and no shared writable files still traded secrets through CPU cache timing. According to Tom's Hardware, the channel relies on shared cache hierarchy, which is present on every multi tenant host that does not pin workloads away from each other.

The verdict is that microVMs remain the right baseline for untrusted agent workloads, and the cache channel shows where that baseline stops. The virtual network can be closed, files can be isolated, and the guest kernel can be supplied by the host, but the cache is shared by design.

The limitations are threefold. First, the channel in the report is low rate and error prone, which limits its practical use for large exfiltration. Second, co location on the same core is required for the easiest form, so scheduling away from shared cores mitigates it. Third, hardware mitigations such as cache partitioning exist on some platforms but are not available everywhere, so a software only fix is incomplete.

### FAQ

**Does this mean Firecracker microVMs are broken?**

No. The channel is a hardware side channel, not a Firecracker bug. Firecracker still enforces memory and kernel isolation via KVM. The cache hierarchy is below that isolation.

**Does disabling cross VM deduplication fix it?**

It closes one side channel but not the cache timing channel. Krova disables deduplication, which removes the shared page channel, but cache timing uses occupancy rather than shared pages.

**Should I pin every Cube to its own core?**

For sensitive multi tenant hosts where you run adversarial agent code next to secrets, yes. For general dev hosts, the cost in scheduling complexity may outweigh the benefit. The right choice depends on whether the two tasks that could share a cache should be considered mutually untrusted.

---

Published on [debugly.dev](https://debugly.dev/) by [Rohit Bhadani](https://debugly.dev/about/) | Founder of [Krova Cloud](https://krova.cloud/?ref=debugly.dev)

---

Published on [debugly.dev](https://debugly.dev/) by [Rohit Bhadani](https://debugly.dev/about/) | Founder of [Krova Cloud](https://krova.cloud/?ref=debugly.dev)