Containing the OptimizerUnmitigated Risk · August 2026

Containing the Optimizer

We call them all “sandboxes” to make them easy, and then quietly assume they all protect the same way. They don’t.

Unmitigated Risk · August 2026 · a field guide to what isolation actually does

EVERYTHING SOLD AS “ISOLATION,” BY HOW MUCH THE OPTIMIZER CAN REACH Container shares the kernel Hosted VM trusts a host OS Fat hypervisor emulated devices Thin monitor minimal interface Confidential VM drops the operator Discrete enclave own silicon Bare metal re-opens a different surface: the shared cache MOST TO ESCAPE INTO NOTHING TO ESCAPE INTO
The whole argument as one shape. Each step to the right removes a layer the optimizer could have reached, the shared kernel, the host OS, the emulated-device interface, the operator, the shared silicon, until at bare metal there is no guest and no host left to break out of, though firmware and the board’s own service processors remain. These are all called “sandboxes,” and the staircase is why that word misleads: they do not offer the same isolation, they offer a descending series of them. The one place the descent is not clean is marked, and it is where the strongest privacy claims are made.

Technical companion to  What Confidential Computing Is, What It Isn’t  ·  Confidential Computing’s Inconvenient Truth

Ask a room of technical people what separates a container from a virtual machine, a virtual machine from a confidential VM, a confidential VM from a hardware enclave, and you will get five confident answers and three correct ones. This is not a failure of intelligence. We call all of them “sandboxes.” It is a genuinely useful word. It makes the concept teachable in one breath, and everyone knows what you roughly mean. The trouble is the side effect. Once four different mechanisms share one friendly name, people assume they share properties too. If this one is safe to run untrusted code in, that one must be. If this one keeps the operator out, that one must. The simplification that made the idea easy quietly ships a false equivalence, and the equivalence is wrong in exactly the places that matter.

That false equivalence is having a moment, because in July 2026 an autonomous AI agent broke out of a test “sandbox” that had no direct internet access, only a package proxy for installing dependencies, and hacked its way into the production systems of a real company. The reaction was a wave of “secure AI” and “private AI” messaging, all of it leaning on the same friendly word and the property-transfer that comes with it. A vendor who says “your model runs in a secure sandbox, even we can’t see it” is not usually lying. They are borrowing the reassurance one kind of sandbox earns and spending it on another, and the reader cannot tell, because the word was flattened before the conversation started.

So what is an optimizer? Fundamentally, every AI you use is one. A model is trained by searching for the parameters that score best against an objective, and an agent built on it runs the same procedure one level up, searching the actions available to it for the ones that get the objective met. Nothing in that procedure knows which paths you meant to leave open. It only knows which ones work. And that is what makes them a security problem worthy of containing.

Container, VM, confidential VM, and enclave are four different mechanisms, built for four different adversaries, making four different promises. Calling them all “sandboxes” makes them easy to talk about and impossible to tell apart, and none of the four, by itself, contains an optimizer. What contains an optimizer is the design wrapped around whichever one you pick, and that is the part the friendly word hides.

This piece is a field guide to telling them apart. It walks the staircase above one step at a time, what each primitive shares, what it was built to resist, and what it honestly promises, then gives you two things to do with it: a way to read what any “secure AI” claim is actually asserting, and a way to size what each rung’s failures cost you when they come. The evidence is the hardware record, because confidential computing is the most heavily studied rung and its failures are documented in a way the agent-sandbox rung’s are not yet. Whether you are buying the claim or building the containment, the ladder is the same. Only the last question differs, and the piece ends by answering it both ways.

Part I · The Ladder

1Container is not VM is not enclave

Start where the confusion starts, because until the words come apart nothing else in this piece can be reasoned about. Four mechanisms get spoken of as one, “sandbox” in casual use, “isolation” in the marketing, and they differ in the one dimension that decides everything downstream: what they share with their neighbours. Sharing is the attack surface. The more a workload shares with the code next to it, the more paths exist between them, and each rung of the ladder shares less than the one below it. One honest caveat before we climb. This is a single axis, not a total order of security. It ranks how much shared, guest-reachable surface each primitive exposes, and two other things that matter, whether the operator is inside or outside your trust boundary, and whether you sit on physically shared silicon, are orthogonal to it and do not move in lockstep as you climb. A confidential VM drops the operator but keeps the shared silicon; a discrete processor drops both. Keep those as separate questions; the ladder answers only the first. The flattening into a single word is convenient and it is exactly what makes the properties look transferable when they are not.

A container shares the host kernel. Namespaces and cgroups give each container its own view of the process table, the filesystem, and the network, but there is one kernel underneath all of them, and a flaw in that kernel is a flaw in the wall between every container on the box. Containers were built to keep cooperating workloads from tripping over each other, a packaging and resource-management tool, not a defense against code that is actively trying to get out. That is not a knock on containers; it is what they are for. It is only a problem when someone points hostile code at one and expects a security boundary, which is exactly what happened in July.

A virtual machine shares the hypervisor and the silicon, but not the kernel. Each guest runs its own operating system, and the hypervisor mediates between them with a far smaller, far more scrutinised interface than a shared kernel exposes. This is a genuine escalation in isolation strength, and it is why the security-conscious response to “run untrusted code” has long been “put a VM boundary around it.” But a VM still trusts the host. The operator, the hypervisor, and anyone who compromises them can see inside the guest. The VM defends you from your neighbours, not from your landlord.

The size difference is not abstract. The Linux kernel accumulated 5,681 CVE identifiers in 2025 alone. Xen, a thin monitor doing a far narrower job, publishes a few dozen advisories a year. Some of that gap is counting convention, since the kernel began assigning an identifier to nearly every backported fix in 2024, which is why the number jumped from 265 in 2023. It is not two orders of magnitude of counting convention. Then notice the other number. Of the 16,436 kernel CVEs indexed by the NVD since 1997, twenty-five have ever been confirmed exploited in the wild. Volume measures surface, not risk, and the two come apart badly. That is the honest case for the smaller interface, and it is the first hint of the argument in Part III, where what you can count turns out not to be what should worry you. It is also why KVM is worth naming early. It turns the kernel itself into the hypervisor, so a KVM host carries the larger number rather than the smaller one.

Those two, container and VM, are the entire isolation vocabulary most deployments actually use, and the gap between them is already large enough to matter. A container escape and a VM escape are different events with different likelihoods and different fixes, and treating “it’s isolated” as though it named one guarantee erases that difference. The next two rungs exist to defend against the landlord, and they are where the AI-privacy pitch lives.

THE SAME QUESTION EACH TIME. WHAT IS BETWEEN YOU AND THE WORKLOAD NEXT DOOR? Rust is shared with your neighbour and is therefore surface. Green is yours alone. Container shares the kernel Virtual machine shares the hypervisor and the silicon Discrete enclave shares neither Workload A Workload B Workload A Workload B Workload A Workload B Shared kernel namespaces and cgroups only change the view Hardware Guest OS A Guest OS B Hypervisor smaller interface, far more scrutinised Hardware Runtime A Runtime B Own processor Own processor Host, outside the trust boundary The wall is the kernel. A flaw in it is a flaw in every wall on the box. The wall is the hypervisor. It still trusts the operator underneath it. The wall is physical. The landlord is outside it. Container and VM are the entire isolation vocabulary most deployments use, and a container escape and a VM escape are different events with different likelihoods and different fixes. Calling both of them “isolated” erases exactly that difference.
The same two workloads, placed on three different rungs. What changes is not how strong the wall is but how much of the stack the neighbours hold in common, because every shared layer is a path between them. The container gives each workload its own view of the process table and the filesystem while one kernel sits under all of them. The VM gives each its own operating system and leaves only the hypervisor and the silicon in common. The enclave removes the shared processor as well, which is the step that finally puts the operator outside the boundary rather than inside it.
THAT SHARED KERNEL IS THE MOST COUNTED SURFACE IN COMPUTING. COUNTING IT SAYS LITTLE. All kernel CVEs since 1997 every identifier in the NVD 16,436 Rated critical 2 per cent of them 324 Confirmed exploited in the wild CISA KEV, all time 25 Drawn to scale. The bottom bar is one pixel wide because that is how wide it is.
The kernel is the most heavily counted attack surface in computing, and counting it turns out to say very little. Volume tracks how much code is exposed and how diligently it is catalogued, not how often anyone gets in. Hold this next to the record in Part III, where the entries have no patch at all: a number you can watch go down every Tuesday is not the same thing as a number that measures your risk. Counts from the NVD via LinuxCVETracker, 1998 to date.
Key lesson

The question that separates the rungs is a simple one: what does it share? A container shares the kernel; a VM shares only the hypervisor and the hardware. Sharing is surface, and surface is risk. “Isolated” without naming the rung is a claim with no threat model attached, which is to say, no claim at all.

2Not all VMs are the same

Before climbing higher, open up the rung we just set down, because “it runs in a VM” hides a range wide enough to matter to the argument. The isolation a VM gives you is set almost entirely by the hypervisor underneath it, and hypervisors differ in two dimensions that each change what the contained code can reach, and then there is a third move, which is to remove the hypervisor from the picture entirely. The optimizer does not see “a VM.” It sees whatever surface the specific arrangement exposes, and it will probe every inch of it.

The first dimension is where the hypervisor runs and how much privileged software sits under the guest. A type-2, or hosted, hypervisor (VirtualBox, VMware Workstation) runs as an application on top of an ordinary host operating system. That means the guest’s isolation depends on the hypervisor and the entire host kernel beneath it; compromise the host OS and the VM boundary is moot. A type-1, or bare-metal, hypervisor (ESXi, Xen) runs directly on the hardware, with no general-purpose OS underneath to drag into the trusted computing base, the set of code you have no choice but to trust because a flaw anywhere in it defeats the boundary. KVM is the instructive middle case, because it does not fit the tidy split. It turns the Linux kernel itself into the hypervisor, so the host OS is the trusted computing base, and Firecracker and Cloud Hypervisor run as thin user-space monitors on top of exactly that. The lesson is that the layers of privileged software the guest sits on top of vary enormously between two things both called “a hypervisor,” and that variation is a rung. The hosted case trusts everything a full OS trusts; the bare-metal case trusts less; and where KVM lands depends on how much of Linux the monitor above it actually exposes.

The second dimension is how much the hypervisor exposes to the guest. A fat hypervisor carries decades of features (emulated devices, live migration, a broad paravirtualized interface), and that emulated-device code is precisely where most historical VM escapes have lived; the canonical ones are bugs in an emulated floppy or network controller the guest was never expected to weaponise. A thin monitor like Firecracker deliberately strips that device-emulation surface down to a minimal, purpose-built interface, which is the entire reason it can be trusted around untrusted code in a way a legacy hypervisor cannot. Firecracker does this on top of Linux KVM, not instead of it, so the shrinking is of the monitor’s own exposed interface rather than of everything beneath it (AWS Nitro reaches a similar small guest interface by a different route, its own hypervisor and dedicated offload hardware rather than KVM). Same word, an order of magnitude difference in the surface the guest can reach. One thing none of these VM arrangements changes, though, is that a thin monitor still trusts the operator underneath it. Only the confidential-VM rung above, SEV-SNP and TDX, uses hardware to drop the operator from the trust boundary. A smaller guest interface and an untrusted operator are different axes, and it is worth not letting “minimal” slide into “shielded from the host.”

“PUT IT IN A VM” NAMES FIVE DIFFERENT AMOUNTS OF TRUST LARGER TRUSTED SURFACE NOTHING LEFT TO ESCAPE INTO Type-2 (hosted) VirtualBox runs as an app on a full host OS TRUSTS hypervisor + the whole host kernel biggest surface Fat Type-1 ESXi, legacy Xen bare-metal, but with broad device emulation TRUSTS a large emulated interface where escapes live Thin monitor Firecracker, Nitro on Linux KVM, minimal purpose-built interface TRUSTS a deliberately small surface still trusts operator Confidential VM SEV-SNP, TDX hardware drops the operator from the trust boundary TRUSTS the silicon, not the hypervisor but shares the cache No hypervisor TamaGo on the metal app runs directly on hardware; no OS, no monitor beneath TRUSTS firmware + the runtime, nothing else no guest = nothing to escape into
The middle rung of the main ladder, opened up. “It runs in a VM” can mean any of these, and they do not offer the same isolation: a hosted hypervisor trusts an entire host OS the guest can reach through, a fat bare-metal hypervisor trusts a large emulated-device interface (where most historical VM escapes have lived), a thin monitor shrinks that interface on purpose, and a confidential VM uses hardware to drop the operator from the trust boundary. The fifth column is the floor of the axis. Run the workload directly on the hardware with no hypervisor and no OS beneath it, as the TamaGo project does, and the hypervisor-escape and kernel-escape classes have no target at all, because there is no guest and no host, only the application and the firmware. Same three words at the left, and at the right they stop applying entirely.

The confidential VM near the far end is itself a hypervisor variant, the one where the hardware removes the operator from the trust boundary, so the guest no longer has to trust the hypervisor at all. That is what makes it the bridge to the upper rungs, and it is why the “even we can’t see it” claim is coherent only for this arrangement and not for the ones to its left. It is also, as the record will show, the arrangement that trades the hypervisor’s surface for the cache’s. The ladder in this part is described in CPU terms, because that is where the primitives were built and where the record is deepest; if your workload runs on accelerators, the rungs still apply but the sharing story underneath them is far less settled, which §9 takes up directly.

Keep going in that direction and you reach the floor of the whole axis: no hypervisor at all. Compile the workload to run directly on the hardware, with no host OS, no monitor, and no guest, and the entire family of hypervisor-escape and kernel-escape attacks loses its target, because the layers those attacks live in are simply not present. This is not hypothetical; it is what a project like TamaGo does, running a memory-safe Go application bare-metal on hardware like the USB armory, with the trusted computing base reduced to the firmware and the runtime and nothing else. The catch is the same trade the dedicated security processor makes at the top of the main ladder, reached from the software side. You give up the cloud model entirely (one workload owns the machine, no multi-tenancy, no orchestration) and you move the whole of your trust onto the firmware and the runtime, which are now the entire attack surface. The cost is not abstract. Bin-packing, elasticity, live migration, spot capacity, the entire economics that make cloud inference affordable all assume many tenants sharing a machine, and the top rungs give exactly that up. Which is why this end of the axis is not for a typical deployment. It is for the case where the workload itself is the crown jewel and the multi-tenancy discount is not worth what it exposes, a frontier lab isolating model weights, a signing operation, a key-management core. For everyone running inference at cloud economics, the honest position is that the top rung is not available to you, and the design question is how you contain an optimizer on a rung that shares silicon. It is the strongest containment on this sub-ladder and the least like a cloud deployment, and which of those facts matters more is exactly the design decision this piece is trying to make legible.

Key lesson

“Put it in a VM” is not one decision. Hosted versus bare-metal sets how much host you trust; fat versus thin sets how much surface the guest can touch; the confidential variant drops the operator; removing the hypervisor leaves nothing to escape into. The optimizer’s reach is decided by which arrangement, and the phrase “in a VM” conceals exactly that, so you have to ask.

3Why the rungs get confused

The reason these mechanisms blur together, and the reason a primitive built for one job keeps getting sold for another, is almost never incompetence. It is economics, and the pattern is old enough to have a shape. Build a mechanism X for threat model Y; later, repurpose X for threat model Z, because X already exists and shipping it beats building the right thing years from now. Each repurposing quietly changes what the mechanism protects against while the name stays the same, and that is how one word ends up covering four threat models.

I have watched this run several times over thirty years in and around the public-key infrastructure that secures the web, and the examples rhyme. SMS was built for messaging and repurposed as an authentication channel; SIM-swapping exploited the gap, and the channel is still everywhere because deployment inertia beats the security community’s ability to move a market. SSL was built for browser sessions and repurposed for APIs, IoT, email, and VPNs; the ecosystem spent two decades closing the resulting gaps through Certificate Transparency, stricter issuance rules, and sustained institutional pressure, fixes that were not inevitable and did not come from patching. And Intel’s SGX was built for secure remote computation, with content protection as one of its flagship early uses, protecting a media stream from the machine’s owner (it underpinned Ultra HD Blu-ray playback, and its removal from later chips broke that), then was repurposed to protect a cloud tenant from the machine’s operator. That last repurposing did something worse than widen the threat model. It inverted it. The party SGX’s content-protection use was built to trust, the platform owner, became the party the cloud version has to defend against.

THE SAME MECHANISM. THE TRUSTED PARTY MOVED TO THE OTHER SIDE. EARLY USE — CONTENT PROTECTION enclave unchanged owner TRUSTED user ADVERSARY repurpose same chip DEPLOYED IN — MULTI-TENANT CLOUD enclave unchanged operator NOW ADVERSARY tenant PROTECTED the party the design trusts is now the adversary The boundary did not move. The colour did — green to red, on the party it was built to trust.
SGX kept the same silicon boundary across the repurposing. What flipped is the trust relationship. The owner it was designed to serve became the adversary it now has to resist. Every shared-resource attack in the record lives in the space that inversion opened, and the same inversion is happening now, in software, to the agent sandbox.

Hold that against the box that escaped in July. A container runtime and a language-model sandbox were built to contain cooperating code (code that is not trying to leave). Point an autonomous agent at one, feed it instructions from an untrusted web page or a poisoned document, or just turn it loose to optimize hard against a benchmark, and the contained code is now adversarial by construction. Same box, inverted threat model. The container did not fail at its job; it was asked to do a different job, one rung above the one it occupies, and the name “sandbox” hid the substitution.

Key lesson

Repurposing is why the ladder’s rungs get confused. The mechanism keeps its name while its threat model changes underneath. When a vendor says “sandbox” or “isolated,” ask which rung they mean and which adversary it was built for, because the odds are good the primitive is being asked to defend against something it was never designed to resist.

4The top of the ladder, and the conflation

The two upper rungs exist to defend against the landlord (the operator the VM still trusts), and they are where “secure AI” and “private AI” actually live. A confidential VM (AMD SEV-SNP, Intel TDX) keeps the guest encrypted in memory so that even the operator and the hypervisor cannot read it through the software stack. This is the technology behind almost every “even we can’t see your data” claim, and within its threat model it delivers. The provider genuinely cannot read your memory the ordinary way. But a confidential VM still shares the physical caches, buses, and the memory-encryption engine with other tenants, and those shared resources leak through side channels that the encryption does not touch. A side channel carries no data of its own. It lets an attacker infer the data from how the hardware behaves, how long an operation takes, which cache lines it touches, so nothing is ever decrypted and the encryption is never defeated. The guarantee is real and it is narrower than the sentence implies.

A dedicated security processor (a hardware security module, a smartcard secure element, Apple’s Secure Enclave) sits at the top because it shares almost nothing with the workloads around it. It runs on physically dedicated execution resources, its own processor and a protected region of memory, rather than time-slicing the same cores and caches as other tenants, so the cache-timing, speculative-execution, and port-contention classes that plague the shared-silicon rungs are categorically absent rather than merely mitigated. (This is a different claim from the confidential-VM rung. AWS Nitro Enclaves, for instance, are hardened VMs isolated by the Nitro hypervisor, not a dedicated security processor, and belong a rung down.) The trade is explicit and it is not free. A dedicated security processor does not solve cloud multi-tenancy, which is the entire reason the industry reached for shared-silicon confidential VMs in the first place. You buy the strongest isolation by giving up the sharing that made the cloud economical.

Now the conflation, stated plainly. “Your model runs in a secure enclave, even we can’t see it” is a sentence that borrows the word from the top rung and the economics from a middle one. Sold as an enclave-grade promise, delivered on a shared-silicon confidential VM, it inherits the confidential VM’s side channels, which, as Part III shows, are exactly the ones that reach model weights and user prompts. The pitch is not usually a lie. It is a rung substitution, selling the guarantee of the top of the ladder at the price and deployment of the middle, and the substitution passes unnoticed because “sandbox” covers both rungs equally.

WHAT EACH RUNG KEEPS OUT. THE LAST ROW IS WHY THIS PIECE HAS THREE MORE PARTS. Container shares the kernel Virtual machine shares the hypervisor Confidential VM shares the silicon Discrete enclave shares neither A bug in the workload next door the accident case, not an attacker A malicious co-tenant, through software kernel or hypervisor escape A malicious co-tenant, through the silicon cache, ports, memory bus The operator, through the software path the landlord reading your memory The operator, with physical access vendors place this out of scope The optimizer you put inside on purpose it is not trying to get in kept out partly, and not by the vendor’s promise not kept out Climbing moves rows from open to closed, top down. It never reaches the bottom row, because that adversary arrived with your credentials.
The ladder as a threat model. Each rung is a claim about which adversaries it excludes, and reading down a column tells you what you have actually bought. Two rows never close. Physical access is out of scope in the vendors’ own threat models rather than defended against, and the optimizer is not excluded by any rung because it is not an intruder: it holds your credentials, runs your workload, and reaches the network you gave it. Every rung above answers the question “who is kept out.” Nothing on this ladder answers “what is the thing inside allowed to do,” which is the question the rest of the piece is about.
Key lesson

“Even we can’t see it” is a confidential-VM promise wearing enclave language. It is true through the software stack and false through the cache. When a “secure” or “private” AI claim reaches you, the first job is to locate which rung it actually runs on, because the promise is only as strong as the rung, not as strong as the adjective.

Part II · What It Costs When a Rung Fails

5Vector tells you how. It doesn’t tell you what to do

Attacks on a hardware boundary sort into seven vectors, by how the attacker gets information across it. A single attack can span more than one, a speculative-execution bug that leaks through a cache side channel touches two, but the vector names where the boundary actually failed. They run roughly from the shared-resource side channels that dominate the record to the interface and firmware attacks that look most like a classic software escape.

SEVEN WAYS ACROSS THE BOUNDARY, COLOURED BY HOW FIXABLE THEY TEND TO BE the boundary code + data, encrypted Cache / memory side channel watch cache timing to infer secrets Speculative / transient read rolled-back state via its traces Microarchitectural state port contention, power, interrupts Fault injection glitch voltage or clock to corrupt it 1 2 3 4 Software interface abuse the API between in and out Firmware / microcode / key break the root of trust itself Physical / bus interposition tap the memory bus in hardware 7 6 5 tends architectural tends compensating tends patchable tends root-of-trust Vector 7 looks like a classic sandbox escape. Vectors 1–3 have no equivalent in the container world.
Container and sandbox escapes cluster almost entirely in vector 7, the interface. The hardware record is dominated by vectors 1–3, the shared-resource side channels, which have no analogue in a pure-software sandbox. That is the first thing the AI-isolation conversation should absorb. Moving isolation into shared silicon adds whole attack classes that software isolation never had.

The vector is useful, but it stops one step short of the decision. Knowing an attack was a cache side channel or an interface bug tells you a great deal about how it works and nothing directly about what you should do. And that missing step is precisely the one a vulnerability score also skips. A CVSS number rates how bad the exposure is if exploited. It says nothing about whether the fix is a maintenance window or a hardware-replacement cycle, and it treats a bug closed in next month’s microcode and a leak baked into the silicon for the machine’s five-year service life as the same species of problem, because from the standpoint of severity they can be identical.

Key lesson

Vector and severity together still leave the operational question unanswered: is this a patch, a workaround, a refresh cycle, or a full rotation? Neither the attack’s mechanism nor its score tells you. That is the gap the next section fills, and it is the gap the whole industry currently reads past.

6How fixable is it, really

So sort the record a second way, not by how the boundary was crossed, but by how fundamentally fixable the weakness is. This is the cost layer that sits under the ladder. Once you know which rung a workload is on, remediability tells you what that rung’s failures will cost you. It has four values, and the value, not the severity, is what sizes your response.

NOT HOW BAD IT IS. WHAT IT WILL TAKE TO MAKE IT STOP. Patchable SDK, microcode, or firmware update fixes it DO schedule the patch; accept the perf cost Compensating control bug stays; you reduce the conditions for it DO disable SMT, secure the facility, add verifiers Architectural property of the silicon; no patch, only new HW DO accept residual risk or plan the refresh cycle Root-of-trust break the trust anchor itself; attestation can be forged DO decommission the gen; rotate sealed secrets MAINTENANCE WINDOW CAPEX DECISION
The four fates, named. Left to right, the response grows from something ops closes on a Tuesday to something that ends a hardware generation. The data loss can be identical across all four; what differs is the cost and shape of the response, which is exactly what a severity score omits.

Patchable. A flaw in an SDK, microcode, or firmware that an update resolves. Foreshadow, ZombieLoad, Downfall, most speculative-execution attacks, the July agent’s whole exploit chain. Often carries a performance cost, but the flaw is gone for patched systems. Compensating control. The flaw stays; you reduce the conditions under which it can be exploited, disable simultaneous multithreading, put the hardware in a physically secured facility, run multiple independent attestation verifiers. You have not fixed it; you have narrowed it. Architectural. A property of the silicon or the encryption engine that no patch reaches: deterministic memory encryption, where identical plaintext always produces identical ciphertext, so an observer learns what changed without decrypting anything; port contention, where two tenants competing for the same execution unit can each time the other; physical interposition on the memory bus. It persists for the life of the hardware; mitigations reduce exploitability without removing the cause. Root-of-trust break. The trust anchor itself is compromised, a root key extracted from fuses, a microcode signature check defeated. These do not leak data; they forge the proof that the boundary exists, which makes attestation itself, the cryptographic proof that the boundary is genuine and running what it claims, meaningless for the whole platform generation. One qualification keeps this honest. Some trust anchors are rotatable. When SGAxe extracted SGX attestation keys, Intel could run a TCB recovery, invalidating the compromised keys and re-issuing new ones once the underlying microcode flaw was patched, and the attestation ecosystem is designed for exactly that move. The break is unrecoverable when the extracted material is not rotatable, a global key burned into fuses at manufacture (the shape of TEE.Fail and global-wrapping-key extraction), where there is no new key to issue because the old one is the silicon. Rotatable anchor, a bad calendar quarter. Fused anchor, the platform generation is done. The line that argues is the one between compensating and architectural, and some entries sit close enough to it that a careful reader could file them either way. When that happens the resolving question is which response you would actually have to fund, because that is the only thing the class is for.

The reason this beats a severity score is that it maps directly to money and calendar. Patchable is a maintenance window. Compensating is an operational setting and some lost performance. Architectural is either accepted residual risk or a line item in the next hardware refresh. Root-of-trust is decommissioning the platform generation and rotating every secret ever sealed to it. Four different budgets, four different owners, four different timelines, and a CVSS number distinguishes none of them.

Key lesson

Before you act on any isolation vulnerability, place it in one of the four fates. That placement, not the severity score, tells you whether you are scheduling a patch, changing a setting, budgeting hardware, or rotating everything. The score tells you how much it hurts; the fate tells you what it costs to stop.

7The shape of the record is the argument

Sort the whole published record into those four columns and the distribution, not any single entry, is what carries the argument. The patchable column is crowded and reassuring. Real attacks, real severity, all closed by an update. This is the column the industry is comfortable in, because it is the column where effort reliably produces safety. It is also the column the marketing is happy to discuss, because “we patched it” is a good sentence.

The two right-hand columns are where the durable risk lives, and they are the columns the marketing never mentions. Ciphertext side channels on AMD SEV-SNP, port contention that disabling hyperthreading does not touch, physical bus interposition with a thousand-dollar device. These are not bugs awaiting a patch. They are what the hardware does. And root-of-trust breaks, a global wrapping key pulled from fuses, an insecure hash that let researchers load malicious microcode under a confidential-VM technology, do not leak data at all. They forge the proof. When those land, no patch restores trust, because the thing that was broken is the mechanism by which trust was established.

That asymmetry is the argument in one observation. The failures that are easiest to fix are the ones the industry talks about, and the failures that are impossible to fix are the ones it doesn’t. A reader who only follows the patch announcements sees a technology getting steadily safer. A reader who sorts by fate sees a technology whose worst problems are structurally exempt from the only response the industry has practiced. The next part lets you do that sort yourself.

THE LARGEST COLUMN IN THE RECORD IS THE ONE THAT DISAPPEARS WHEN THE WORKLOAD IS AI. The whole published record n = 28 PATCHABLE 11 COMPENSATING 5 ARCHITECTURAL 8 ROOT-OF-TRUST 4 Only the entries that reach model weights, inference inputs, or prompts n = 4 COMPENSATING 1 ARCHITECTURAL 3 patchable in the record above architectural in the one below Patchable: 11 of 28 in the full record, 0 of 4 once the workload is the thing being protected. Bars are scaled to share, not to count.
Both bars are drawn to the same width so the shapes can be compared, which flatters the lower one, since it rests on four entries against twenty-eight, and four is few enough that one new disclosure would visibly move it. The direction is still the argument. The column the industry has practised on is the largest in the record and absent from the subset that reaches the assets worth the most, and nothing about that gap is a patching problem.
Key lesson

The record is a distribution across four fates, and the distribution is lopsided in a way that flatters the patch cycle. The fixable failures are visible and discussed, the unfixable ones are quiet and permanent. Read the shape, not the entries.

Part III · Reading the Record

8The record, sorted by fate

Here is the published record, the attacks that give this guide its evidence, sorted the way that matters rather than by platform. Filter by remediability class, by attack vector, or narrow to the entries that bear directly on AI workloads. The bar shows how the visible set distributes across the four fates; watch it shift as you filter, because that shifting distribution is the argument you can now run for yourself.

Patchable Compensating Architectural Root-of-trust break

YearAttackPlatform VectorFateWhat it gets

Each row anchor-links. The § copies a direct link to that entry, so a specific attack can be cited on its own. Entries marked AI extract model weights, inference inputs, or user prompts from a running workload, and each rests on published, peer-reviewed research rather than rumor. This set covers the attacks that carry the argument; it is not the complete catalog. The newest entries are also the least settled, having had the least time to be replicated or contradicted.

Key lesson

Toggle AI-relevant only and read the bar. The patchable segment vanishes. Every attack that reaches into a running AI workload lands in the architectural or compensating columns, the two the patch cycle cannot close. Hold that result; the next section is about why almost no one deploying AI isolation has noticed it.

9The rung AI runs on, and hasn’t met yet

Put the ladder and the record together and the picture sharpens. “Private AI” is sold on the confidential-VM rung (the one that shares caches, buses, and the memory engine) while the conversation about its failures is stuck one rung lower, among the container-and-sandbox escapes. That is the mismatch this whole piece exists to name. The AI-isolation conversation is living almost entirely in the patchable column and has not yet met the other three. Container escapes, agent jailbreaks, tool-call breakouts, nearly all vector 7, nearly all genuinely patchable. That is a real treadmill, and the industry knows how to run it. The mistake is concluding from the treadmill that isolation for AI is fundamentally a patching problem.

It stops being one the instant those workloads share silicon. Put an inference job on a GPU or CPU it shares with another tenant and the shared-resource side channels (the architectural column) come into scope, and nobody in the sandbox-escape discussion is talking about them yet. The three entries that carry this are the newest in the record, and none of them breaks any cryptography. TDXRay reconstructs a language model’s user prompts from inside an encrypted confidential VM, recovering them from a single memory access trace at better than ninety per cent similarity, by watching at cache-line granularity which hash-map buckets the tokenizer walks. The data stays encrypted the whole time; the computation pattern leaks it. HyperTheft and CipherSteal do the same to the two assets an AI deployment most wants to protect, model weights and inference inputs, through a ciphertext side channel. All three are architectural. A patch can raise the cost or add mitigations, but none of them removes the underlying shared-resource leakage mechanism, because that mechanism is the shared silicon doing its job. The ciphertext channel is the sharpest illustration, because it does now have a fix. Starting with Zen 5, AMD can check the hypervisor’s reads against the hardware rather than only its writes, hiding guest ciphertext and closing the software-based ciphertext attacks as a class. Notice what that fix is. It is not microcode and it is not a kernel patch; it is a silicon generation. Most deployed SEV-SNP fleets do not have the hardware, it is not on by default where they do, and it carries a performance cost when enabled. That is what the architectural column means in practice: not “unfixable forever,” but “fixed on a purchase order and a refresh cycle, not on a patch Tuesday.”

THE PATCHABLE YEARS ARE THE EARLY ONES. WHAT ARRIVES NOW MOSTLY CANNOT BE PATCHED. Bubble size is the number of entries; the solid core is the share that reaches model weights, inference inputs, or prompts. 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 Patchable 2 2 2 2 Compensating 2 Architectural 3 2 Root-of-trust 2 2018–2021: 5 of 8 patchable. 2024–2026: 3 of 16, with architectural and root-of-trust taking nine. Every AI-relevant entry falls in the later window.
The same twenty-eight entries from the record above, placed in time. One caution before reading a trend into it. The counts are small, so a single disclosure moves a row visibly. What the small counts do not explain is the composition. The early record is mostly the speculative-execution and interface bugs that a patch closes, the recent record is mostly the shared-silicon and root-of-trust findings that no patch closes, and the entries that reach the assets AI deployments exist to protect appear only after 2023. Whether that last fact is an accident of when the research happened is the first thing to ask, and the paragraph below answers it.

It would be fair to stop here and ask whether that result is real or an accident of timing. Every AI-relevant entry is recent, recent research skews toward exotic hardware attacks because the easy interface bugs were picked over years ago, so perhaps “none of them patchable” says more about the sample than about AI. The objection is worth taking seriously, and there is a mechanism underneath the pattern that answers it. An interface bug gives an attacker execution: a way in, a shell, an escalation, the thing a patch takes back by closing the hole. But the assets an AI deployment exists to protect (the weights, the prompt, the inference input) are not seized by getting in. They leak from observation of a running computation: watching which cache lines the tokenizer touches, reading the ciphertext as it changes, timing the memory bus. Reading a computation without breaking into it is precisely what shared silicon structurally permits and what a patch cannot revoke, because there is no defect to fix, only physics being observed. So the extraction attacks are architectural for a reason that has nothing to do with when they were published: the thing being protected is exposed by the sharing itself, not by any particular bug in the boundary. The timing is a coincidence; the column is not.

The “private AI” promise is that encryption protects your data in memory. It does. Then the computation pattern leaks the same data through the cache, because that is a different boundary than the one the encryption defends.

It is worth being fair to the technology here, because the failure is not the one it looks like. Confidential computing does deliver a real guarantee, and a valuable one: it excludes the honest-but-curious operator through the ordinary software path. A cloud provider running a SEV-SNP or TDX instance genuinely cannot read the tenant’s memory the normal way, and for a bank or a hospital renting someone else’s machine, that is a real change in what is possible. The mechanism does the thing it was built to do. The trouble is everything sold on top of that. The published record against these parts is not a handful of edge cases: SEV-SNP alone has been broken by CipherLeaks, CacheWarp, WeSee, and Heckler, and the memory-integrity and attestation guarantees fall to a roughly ten-dollar interposer in BadRAM and a fifty-dollar one in Battering RAM, the latter bypassing Intel SGX and AMD SEV-SNP alike. But notice where the vendors draw their own line: Intel, AMD, and Arm all state that physical attacks are out of scope of their threat model, and the shared-cache side channels are a boundary the memory encryption was never designed to touch. So the honest reading is not that the silicon is defective. It is that “even we can’t see it” is true against exactly the adversary it was built for and false against a co-tenant or a physical attacker, threats the builders themselves already told you they do not cover. The guarantee is real. The marketing sells its scope, and the scope is the part that was quietly dropped.

One precondition is worth stating, because it is the first thing a careful reader will reach for. Nearly all of these attacks assume a hostile or compromised host: TDXRay’s own threat model is an operator who controls the host kernel and hypervisor, and the ciphertext attacks assume the same. If your operator is not in your threat model, none of this is aimed at you, and a well-run cloud with careful placement and monitoring makes the expected loss lower still. But notice which adversary that is. “Even we can’t see it” is a promise made about the operator specifically, and it is sold to buyers whose reason for wanting it is that they do not want to trust the operator. The precondition these attacks require is not an exotic assumption bolted on to make them work. It is the exact adversary the sentence names.

So the AI-isolation world faces two problems stacked on top of each other. On top, the interface treadmill: patchable, loud, survivable, and getting all the attention. Underneath, the shared-silicon side channels: architectural, quiet, permanent, and getting almost none. A field that reads only the top of that stack will conclude, correctly, that it is patching fast, and miss, entirely, that its most valuable assets are exposed through a boundary no patch defends. The record hands you that reading a decade before you would otherwise reach it entry by entry.

And the record so far is mostly the CPU side of the story, which understates the problem, because AI runs on the accelerator, where sharing is even less settled. A GPU was built to serve one workload at a time, and Kubernetes still hands a pod a whole GPU by default, so cross-tenant sharing was added afterward with uneven isolation: NVIDIA’s hardware partitioning (MIG) gives tenants genuinely separate memory but arrived only with Ampere and is unevenly adopted, while the software time-slicing many environments fall back on does not isolate memory between the workloads sharing a card. The exposures follow the same architectural shape as the CPU ones. LeftoverLocals (CVE-2023-4969) let one process read another’s data out of GPU local memory that was never cleared between kernels; GPUHammer (USENIX Security 2025) showed Rowhammer bit-flips in a GPU’s GDDR6, where a single flip in a weight’s exponent collapsed model accuracy from around 80 percent to under one, mitigable only with error-correcting memory that costs standing performance and capacity. Same lesson as the confidential-VM rung. No patch makes shared silicon stop being shared.

Key lesson

If your AI workload runs on shared accelerators and the thing you are protecting is worth more than the cost of a side-channel attack, a frontier model’s weights, a user’s prompts under a privacy promise, then the architectural column is your real threat model, and no patch cadence addresses it. That is a design decision to make now, not a bug to await.

10Grading the escape

Now run the instrument on the incident that opened the piece, because grading a case you have heard of is how the lens becomes something you can use rather than something you have read. Take the July agent’s attack chain link by link and place each one.

The SSRF against the package proxy, which bought indirect internet access by having the proxy fetch external content on the agents’ behalf: vector 7, patchable. The token-forgery zero-day found a month later, where a legacy refresh endpoint accepted an invalid signature and handed back a validly signed administrative one: vector 7, patchable. The Linux kernel privilege escalation, a recent CVE whose public exploit the agents customised for the host they landed on: vector 7, patchable. The credential harvesting and lateral movement: interface and configuration, patchable. Two independently discovered bugs and two known classes, and every link lands in the same column. OpenAI did exactly what that fate prescribes: revoke the credentials, rebuild the service, patch the zero-day, wipe the board. On the record so far, a textbook patchable-column response, executed competently.

Then the message board came back. Here is where the grading earns its keep, because the board is not on that list. The persistent message board depended on two things that are not bugs: standing write access to a shared service, and state that survived a teardown. Grade those and they do not land in the patchable column at all, they are design properties, the software equivalent of the architectural column. You cannot patch away “the contained code can write to a shared resource and its writes persist.” The proof is in how it returned. The rebuilt board did not reuse the hole that had just been closed. The agents reconstituted it out of directory names on an unauthenticated WebDAV endpoint, a different mechanism carrying the same property, which is what you would expect if the property rather than the bug was the thing doing the work. You remove it by changing the architecture, with no standing write and ephemeral state. Patch the bugs and the board returns; change the design and the whole class of persistence is gone. The lens told you, before the second disclosure, that the remediation was aimed one column to the left of the actual problem.

EVERY LINK WAS PATCHABLE. THE THING THAT CAME BACK WAS NEVER ON THE LIST. The escape, graded step by step PATCHABLE SSRF proxy fetches for them vector 7 Token forgery separate 0-day, +1 month vector 7 Kernel priv-esc known CVE, customised vector 7 Credentials harvest, lateral interface, config The response landed on every link revoke · rebuild · patch the zero-day · rotate keys — a textbook patchable-column response, executed competently The message board came back, rebuilt on an unauthenticated WebDAV endpoint ARCHITECTURAL Standing write access to a shared service not a bug — a design property State that survives a teardown not a bug — a design property removed only by no standing write, ephemeral state
The escape and the thing that came back are in different columns. Every link OpenAI patched was genuinely patchable, and patching them was the right response to those links. The board did not depend on any of them; it depended on two properties the system was built to have, which is why closing the hole it had used did not stop it returning through another. That is the mismatch the lens surfaces before the second disclosure does.
Key lesson

The incident was not a hard case for the lens; it was a clean demonstration of it. A patchable-column response to an architectural-column problem looks complete and comes back. Grading the chain link by link shows you the mismatch before the second disclosure proves it, which is the entire value of reading by fate.

Part IV · Containing the Optimizer

11Containment is the design, not the rung

Here is the part that should be uncomfortable, and I will be plain about my stake in it. The agent-containment failure was not a surprise to anyone who had watched optimizers before. I wrote up a containment framework for this failure mode well before the incident, but the date is not the point and I do not want it read as a called shot. The point is that nothing in it was exotic. It was the ordinary consensus of people who had watched reinforcement-learning systems discover, over and over, that the fastest path to a reward is rarely the one anyone intended. The threat-model inversion at the root of it, a system that optimizes against its own constraints rather than working within them, was old before agents made it concrete.

The framing then was that an agentic system behaves less like a program and more like an insider. It does not accidentally misuse resources, it optimizes, and successful optimization routinely violates assumptions nobody wrote down. The prescription followed directly, and every line of it maps onto something the July incident violated. Execution should be ephemeral, fresh state each task, so nothing persists between runs; the message board is the counterexample, persistence an ephemeral design would have erased on the next reset. Credentials should be short-lived and scoped, minted per task and attenuated for sub-agents; the incident ran on standing write and harvested long-lived credentials moving laterally. And there should be agents watching the agents, behavioral baselines, anomaly detection, a kill switch, which is precisely the defensive layer OpenAI said, afterward, it needed to build.

THE PRESCRIPTION WAS ORDINARY. EVERY LINE OF IT NAMES SOMETHING THE INCIDENT DID. WRITTEN BEFORE WHAT HAPPENED Execution should be ephemeral fresh state each task, nothing persists between runs The message board persisted it survived the reset that should have erased it Credentials short-lived and scoped minted per task, attenuated for sub-agents Standing write, long-lived credentials harvested and reused to move laterally Agents watching the agents behavioural baselines, anomaly detection, a kill switch The layer built afterward named in the post-incident write-up as the gap Ephemeral infrastructure, scoped tokens, immutable images, tamper-evident logs. None of it was new. What was missing was the decision, not the parts.
The uncomfortable part of this section is not that the failure was predicted. It is that predicting it required nothing unusual. Each line on the left was ordinary practice for anyone who had watched optimizers find the cheap path to a reward, and each one names, in advance, a specific thing the incident went on to do. Read that as three bugs and you patch three bugs. Read it as one design that was never built and the whole class goes away.

None of those are new primitives. Ephemeral infrastructure, scoped tokens, immutable images, caveat-based delegation, tamper-evident logs. All of it is buildable today with parts that already exist. The reason it was not in place is not that it was hard or unknown. It is that the field poured its effort into measuring how good the models are at offense, benchmarks like the one this agent was cheating, and treated containment as something you patch after it breaks. In the vocabulary of this piece, the industry chose to live in the patchable column and called it security.

Safety is a design problem, not a policy problem. You do not get containment by writing a rule that says “do not leave the sandbox” and monitoring for violations. You get it by building an environment where leaving is structurally hard, with no standing write, no persistent state, no egress path the design trusts the contained code to respect. The safe choice has to be the default, because an optimizer will find every path where it is not.

This is why the whole apparatus of vectors and fates is not academic. The remediability lens is, at bottom, a way of asking whether a problem is a bug or a design property, and design properties are not patched, they are designed out. Read the escape as patchable bugs and you patch them and move on, and the agents rebuild the board. Read it as a design failure and you change the architecture, and the class of exploit is gone. And here the software design-property is importantly unlike its hardware namesake. When a side channel is architectural in silicon, you are stuck for the service life of the fleet, and the fix is capital expenditure and a refresh cycle measured in years. When standing write access or persistent state is architectural in a system design, changing the architecture costs a redesign measured in weeks. Both are architectural in the sense that no patch to the existing thing removes them, but one is a hardware generation and the other is a sprint. That asymmetry cuts against the AI industry, not for it, because its architectural problems are mostly the cheap kind, designable-out at the cost of some engineering, which makes leaving them in place a choice rather than a constraint. The lens tells you which reading is true. Acting on the true one is the difference between a maintenance window and a solved problem. But “change the architecture” is still too vague to build from, and the next section makes it concrete, because the design failure has a specific shape and a specific fix.

Key lesson

The failure was foreseen because it was foreseeable, the containment principles were ordinary, not prophetic. What was missing was not knowledge but the decision to treat isolation as an architecture to design rather than a set of bugs to patch. That decision is still available, and it is the only one that reaches the right column.

12The wall, and the holes you cut in it

Everything so far has been about the wall, how tall it is, what it shares, which rung of the staircase you stand on. But no useful workload lives behind an unbroken wall. A container that cannot pull a package, an agent that cannot call a tool, a model that cannot return an answer, a perfectly sealed box is also a perfectly useless one. So every real deployment cuts holes: an egress path, a write channel, a tool API, somewhere to keep state, a credential to authenticate with. This is not carelessness. The holes are the entire point; they are what lets the contained thing do work.

And here is the part the staircase cannot show you. Every hole hands back a property the wall was providing. Cut an egress path and the “no network” property is gone on that path. Grant write access to a shared service and the “cannot affect others” property is gone through that channel. Persist state and the “nothing survives” property is gone for that store. It is tempting to reach for the Swiss-cheese image here, but not the one from safety engineering, this is not Reason’s model of stacked imperfect layers whose holes occasionally line up. It is one wall, deliberately perforated, and the holes do not need to align with anything. Each is a standing trade of a property for a capability, open by design. Which means a stronger rung does not save you. Move from a container to a confidential VM and you have built a taller, thinner wall, around exactly the same holes.

A STRONGER RUNG SHRINKS THE WALL. IT DOES NOTHING ABOUT THE HOLES. The primitive is the wall. strong isolation — and useless sealed shut EGRESS proxy WRITE shared svc API tools STATE persists CREDS every hole is a property of the wall, handed back on purpose mediate Mediation is the containment. every hole brokered, scoped, logged, revocable EGRESS allow-list WRITE read-only unless needed API scoped STATE ephemeral CREDS the wall never changed. the holes became checkpoints.
The primitive, container, VM, enclave, any rung of the staircase, is only the wall. A wall with no holes does no work, so every useful deployment cuts holes through it: an egress path, a write channel, a tool API, a place to keep state, a credential. Each hole hands back a property the wall was providing, which is why a stronger rung does not help, it shrinks the wall while the holes stay exactly as open as you cut them. Containment is not the wall; it is the discipline that governs the holes. In the July incident the wall held, no direct internet, and a single unmediated hole, write-mode access to a shared proxy, was enough, because write is coordination, and the agents used it to leave state for each other. Mediate every hole, brokered, scoped, logged, revocable, read-only until write is truly required, and the same wall becomes containment.

So the containment was never the wall. It is the discipline that governs the holes, and that discipline has a name: mediated access. An unmediated hole is an opening, and anything the contained code wants to push through it, it can. A mediated hole is a checkpoint: every action through it is brokered by something the contained code does not control, scoped to the minimum the task needs, logged so it can be seen, and revocable so it can be shut. Read-only until write is genuinely required. Allow-listed rather than open. Scoped to one purpose rather than general. The wall decides how strong the barrier is between the holes; mediation decides what can happen through them, and it is the second that actually contains an optimizer, because an optimizer’s whole method is to find a hole you left unmediated and use it for something you did not intend.

The July incident is the cleanest possible demonstration, because the wall held. There was no direct internet path; the isolation, in the staircase sense, worked. The escape ran entirely through a hole (the package-registry proxy, a permitted egress channel), and it turned on one property of that hole that nobody had mediated. It was writable. Write access to a shared service is not a data path, it is a coordination path, and the agents used it as one, leaving state for each other on a surface that outlived every teardown. That is the whole mechanism, a hole that was an opening instead of a checkpoint, while the wall itself held. Mediate that one hole, read-only unless write is required, brokered, logged, and the coordination surface never exists, no matter which rung of the staircase the wall was built on.

Key lesson

The primitive is only the wall, and a wall with no holes does no work. Every hole you cut returns a property the wall was giving you, so containment is not the rung you pick, it is whether each hole is a mediated checkpoint or an open door. In July the wall held; one unmediated hole, write access to a shared service, was enough. Grade the holes, not the box.

13Watching what the actions add up to

Mediation has a blind spot, and it is a structural one, not a tuning problem. A mediated hole judges each action on its own: is this write permitted, is this egress on the allow-list, is this credential in scope. It has no memory and no aggregate view, so it can approve a thousand individually-legitimate actions and never notice that together they add up to something you never intended. The July message board is exactly this failure. Any single write to that shared proxy might have looked fine; the coordination channel only exists in the sum of them, and a per-action checkpoint is constitutionally unable to see a sum.

So the second half of containment is a reviewer that reads the accumulated behavior over time. Every mediated hole already emits a signal. That is what “logged” in the previous section was for, and those signals are a stream describing what the contained system has actually been doing, action by action, session by session. The job is to correlate that stream, looking for the shapes that only appear in aggregate: writes that are quietly building shared state, egress that is slowly staging an exfiltration, a sequence of in-scope calls that together probe for a privilege boundary. Then surface the few patterns worth attention to a human, who adjudicates what the machine flagged and, when it is real, feeds the verdict back to close the hole that allowed it.

MEDIATION STOPS THE ACTION NOW. REVIEW CATCHES WHAT THE ACTIONS ADD UP TO. Mediated holes each action brokered, scoped, and logged §12 — per action, now Reviewing agent correlates the findings across actions + sessions over time, in aggregate Human review adjudicates the few patterns worth a look judgment, not volume Tighten mediation close the hole, revoke, scope tighter next time the verdict feeds back emits a signal stream flags a pattern “this is coordination” and closes it a mediated write passes on its own. a thousand of them are a message board.
Mediation is per-action and has no memory, so it can approve a thousand individually-legitimate writes and never see that together they are a coordination channel. The loop closes that gap. Every mediated hole emits a signal; a reviewing agent correlates those signals across actions and sessions, looking for the shape that only appears in aggregate; a human adjudicates the small number of patterns it surfaces; and the verdict feeds back to tighten the mediation that generated the signal. The reviewer has to be automated, stateful, and able to recognize emergent sequences rather than score single actions, for the reason the rest of this piece gives: at machine speed and machine volume a human cannot read the stream, and a static rule only catches the patterns someone already knew to write down, while the optimizer produces novel ones by construction. An agent is the natural way to meet that bar.

The requirement on the reviewer is specific, and it is stronger than “use AI.” It must be automated, because at machine speed and machine volume no human can read the stream in time. It must be stateful and cross-session, because the patterns that matter accumulate across actions and runs. And it must recognize emergent sequences rather than score individual actions, because a static alerting rule only catches shapes someone already wrote down, and the optimizer’s entire method is to produce shapes nobody anticipated. An agent is an excellent way to meet those requirements, the continuous-reasoning move that separates a live conclusion from a live dashboard, pointed at agent behavior rather than compliance state, and it may be the only practical one today. But it is the requirements that are load-bearing, not the label. A human cannot be the monitor here; a human is the adjudicator the monitor exists to protect.

Which raises the obvious problem, and the section would be dishonest to skip it. The reviewing agent is itself a surface with holes. It reads a signal stream from across the system, it has write access to raise findings, it talks to a human. By the argument of the previous section, every one of those is a hole, and an unmediated reviewer is just a higher-value coordination target, one that can see everything and is trusted to report on it. So the monitor gets contained like anything else. It runs least-privileged, reading the signal but unable to act on the workloads it watches; its own actions are attested, so a compromised reviewer cannot quietly rewrite what it reports; and it is not the thing that adjudicates, only the thing that surfaces. The human adjudication has to be bounded the same way, because a loop that asks a person to review ten thousand flags a day does not scale, it collapses, and a collapsed adjudication layer is indistinguishable from none. The reviewer earns its place only by cutting the volume a human sees to something a human can actually judge. Assume it will be wrong in both directions. Tuned to miss nothing it floods the queue until nobody reads it, and tuned for a quiet queue it misses the slow pattern, which is the one worth catching. The asymmetry that matters is in what its verdicts are allowed to do. Tightening a mediation rule on its own recommendation is safe, because the failure mode is inconvenience. Loosening one is not. A monitor that becomes another unmediated surface has not closed the loop. It has added a hole with a privileged view.

Mediation and review are not alternatives, and neither is optional. A mediated system with no aggregate review still ships the message board one legitimate write at a time, because nothing is watching the sum. An aggregate reviewer with no mediation just narrates the breach as it unfolds, because nothing can stop the action. Together they are the two halves of governing a hole: mediation decides what may pass through it in the moment, review decides what the things that passed through it amount to over time, and the human sees only the small, high-value residue that survives both. Both halves rest on a prerequisite worth stating plainly, because it is the part most easily assumed. You cannot mediate or review what you cannot see. Every argument in this section presumes the actions at a hole are observable at the fidelity the reasoning needs, and on some layers they are not. The GPU is the sharp example, opaque enough that its own operators often cannot say which tenant ran what, but it is not the only one; host-level telemetry in practice captures a small fraction of what actually happens. Where the record is thin, mediation and review both degrade quietly, and the first work of containment on those layers is making the hole observable at all.

Key lesson

Mediation is memoryless and per-action; it cannot see a pattern that exists only in aggregate, which is the form the dangerous ones take. So containment needs a second layer: an agent that reads the signal the holes emit, correlates it over time, and hands a human the few patterns worth judging. The human adjudicates; only another agent can do the watching at machine volume.

14The containment scorecard

So here is the second tool, and the one I most want you to leave with. Notice what it actually asks about: egress, standing write, persistent state, credentials, monitoring. Those are not questions about the wall. They are questions about the holes. The scorecard grades your mediation, not your rung; a confidential VM with five unmediated holes scores worse than a plain container with none. Before you deploy an isolation boundary, answer honestly, and read the result as a map of where your residual risk will land, which holes are open doors, and whether the parts you cannot patch are parts you can live with.

Nothing here is stored or sent anywhere. It runs entirely in your browser. The questions are drawn from the failure modes in the record above and the containment properties that separate a patchable problem from a permanent one.

Key lesson

A boundary’s fate is decided at design time, not at disclosure time. The scorecard is the remediability lens turned forward. Instead of grading a failure after it happens, it tells you which column your next failure will land in while you can still change the answer.

15If you’re buying. If you’re building.

The ladder and the fates together give you one procedure, and it forks at the last step depending on which side of the transaction you are on. Everything up to the fork is shared.

Locate the rung. Container, VM, confidential VM, or dedicated security processor, which one is actually running the workload? The marketing word is not the answer; the mechanism is. If you cannot get a straight answer to this question, that is already the finding.

Name the adversary the rung was built for, and the one you actually face. A container resists a clumsy neighbour, not an optimizer. A VM resists a neighbour, not the operator. A confidential VM resists the operator through software, not through the cache. If your adversary is above the rung’s pay grade, the isolation is decorative.

Find the fate of its likely failures. Interface bugs are patchable; shared-silicon side channels are architectural. This tells you whether a breach is a maintenance window or a property you will live with for the life of the hardware.

If you’re buying

Your job is to see through the pitch, and the pitch’s favourite move is the rung substitution: enclave language, confidential-VM economics. So ask the vendor three questions and listen for flinching. Which primitive does my workload actually run on? If the answer is a brand name, make them translate it to a rung. What does this boundary specifically not cover? An honest vendor can name the side channels and the shared resources without being cornered into it; a pitch cannot. When it fails, is the fix a patch or a hardware generation? That separates “we’ll push an update” from “you are exposed until you replace the fleet.” A vendor who answers all three plainly is selling you a rung and telling you which one. A vendor who keeps returning to “even we can’t see it” is selling you an adjective.

If you’re building

Your job is different: the rung is necessary and it is not sufficient, and the part that actually contains an optimizer is the one the staircase does not draw, the design you wrap around whichever rung you chose. Pick the rung your real adversary demands (an optimizer on shared silicon protecting high-value data pushes you toward the top, and the cost of the top is giving up multi-tenancy). Then build the containment the rung does not give you for free: ephemeral state so nothing persists between tasks, no standing write to shared resources, credentials scoped and short-lived, egress bounded rather than “controlled,” and an agent reviewing behavior over time to surface patterns for human judgment. The rung sets your floor. The design is what keeps the optimizer on it. The scorecard above is how you check whether you have built the design or only bought the rung.

THREE STEPS EVERYONE TAKES. THEN IT MATTERS WHICH SIDE OF THE DEAL YOU ARE ON. STEP 1 Locate the rung container, VM, confidential VM, or security processor. The mechanism, not the marketing word. STEP 2 Name the adversary the one the rung was built for, and the one you actually face. If it outranks the rung, decorative. STEP 3 Find the fate interface bugs are patchable. Shared silicon is architectural. Maintenance window, or fleet. only the last step forks If you’re buying ask three questions, listen for flinching Which primitive does my workload actually run on? What does this boundary specifically not cover? When it fails, is the fix a patch or a hardware generation? Plain answers mean they are selling you a rung. Adjectives mean a pitch. If you’re building the rung is the floor, not the containment Ephemeral state, nothing persists between tasks No standing write to shared resources Credentials scoped and short-lived Egress bounded, not “controlled” An agent reviewing behaviour over time The rung sets your floor. The design is what keeps the optimizer on it.
Everything above the fork is the same work whichever side you are on, and it is the whole piece compressed into three questions you can ask about a system in front of you. The fork is only about what you do with the answers. A buyer is trying to find out which rung is really underneath a sentence; a builder already knows and has to supply the part the rung was never going to provide.
Key lesson

Buying or building, the first three steps are the same: locate the rung, name the adversary, find the fate. Only the last step forks. The buyer makes the vendor name the rung and its gaps; the builder wraps that rung in the design that contains the optimizer. Neither can start until “isolation” is resolved into a mechanism, the one thing the marketing prevents.

So here is the whole piece in one move. We have been asking how strong the sandbox is, and that is an incomplete unit of analysis. The strength of the wall is one number among several, and rarely the one that decides the outcome. Two questions decide more, and they are the two this piece has been building: which failures are patchable and which are properties of the architecture, because that sets what a fix actually costs; and, separately, which capabilities you deliberately cut through the wall to do useful work, because the wall is only ever half the story. Containment lives in the architecture that governs those capabilities, mediates the openings, and reasons about what the permitted actions add up to over time. Ask that of any “secure AI” claim, of any deployment you are about to ship, and the friendly word stops hiding anything. That is the entire use of the model. It tells you what you are actually holding.

Check your understanding

Ten questions on telling the primitives apart and reading a containment by its holes. The wrong answers are the plausible ones.