workerd / Cloudflare Code Mode: five memory-corruption bugs enable sandbox escape and cross-tenant "heap swipe"
Summary
Check Point Research's August 6, 2026 writeup "When Agentic Glue Melts: Exploiting Cloudflare Code Mode and Workers" (presented at Black Hat USA 2026 with public proof-of-concept code) documents five memory-corruption vulnerabilities in workerd's native C++ layer — the in-process "glue" between JavaScript and the runtime in Cloudflare's open-source edge runtime workerd. workerd is the isolation substrate for both Cloudflare Workers (multi-tenant serverless, >10% of all traffic on Cloudflare's network) and the new Code Mode technique for AI-agent tool use, where an LLM writes a TypeScript program against a typed tool API instead of emitting one structured tool call at a time.
Because workerd isolates untrusted tenants in V8 isolates inside a single shared process — a software boundary, not an OS/hardware one — the five bugs collapse into two end-to-end attacks:
- Cross-tenant heap swipe (Workers) — an out-of-bounds read in
URLPatternlets one Worker reach across the shared process heap and read another tenant's secrets. - Code Mode sandbox escape — starting from a prompt injection, a use-after-free in
node:zlibbreaks out of the sandbox and executes native code on the host.
Cloudflare rated two of the five bugs Critical. Cloudflare's managed Workers environment was fixed in production; self-hosted workerd / Code Mode deployments should update to workerd v1.20260619.1. No in-the-wild exploitation or actor attribution is reported.
Tags
- tools
- workerd
- Cloudflare
- Cloudflare Workers
- Code Mode
- MCP
- V8
- V8 isolates
- sandbox escape
- cross-tenant
- out-of-bounds read
- use-after-free
- memory corruption
- URLPattern
- node:zlib
- prompt injection
- agentic AI
- Black Hat USA 2026
- Check Point Research
- critical vulnerability
Why this matters
- Code Mode changes the agent attack surface. In classic MCP/tool-calling loops the model emits one
{tool, args}call per step; in Code Mode the model writes one program that orchestrates many tool calls locally. The generated code runs in workerd's Code Mode sandbox — so prompt injection that reaches Code Mode now lands in a runtime whose security model is a single in-process V8 isolate boundary, not a container or VM. A sandbox escape from that boundary is a host-code-execution primitive on an edge platform carrying more than 10% of Cloudflare's network traffic. - The blast radius is the whole multi-tenant runtime. workerd packs many customers' untrusted code into one process; V8 isolates are the tenant boundary. Memory corruption in the native glue defeats that boundary for both tenants (cross-tenant read) and the host (sandbox escape) — the two failure modes a shared-edge-runtime operator has to treat as equivalent to cross-tenant data breach.
- The "glue" layer is the recurring soft spot. Same family as isolated-vm's
ExternalCopyhandoff and JSONata's host-object bridge: a "safe" sandbox whose native binding code between the JS world and the host reaches across the trust boundary.
The two demonstrated attacks
1. Cross-tenant heap swipe (URLPattern OOB read). An out-of-bounds read in URLPattern allows one Worker to read across the shared process heap and exfiltrate another tenant's secrets — a direct cross-tenant data-theft primitive against the Workers multi-tenant model.
2. Code Mode sandbox escape (node:zlib use-after-free). Starting from a prompt-injection position inside Code Mode, a use-after-free in the node:zlib native module breaks out of the isolate sandbox and executes native code on the host — the full prompt-injection-to-host-execution chain.
The five underlying bugs are memory-corruption flaws in workerd's native C++ (the glue between JavaScript and the runtime); Check Point released proof-of-concept code with the Black Hat USA 2026 talk.
Affected / patched
| Component | Exposure | Mitigation |
|---|---|---|
| Cloudflare managed Workers | Fixed in production by Cloudflare | No action required for managed Workers |
Self-hosted workerd (GitHub cloudflare/workerd) |
Cross-tenant + sandbox-escape exposure until patched | Update to v1.20260619.1 or later |
| Code Mode deployments (AI-agent MCP tool-execution sandboxes on workerd) | Prompt-injection-to-host path | Update workerd; treat Code Mode output as untrusted native-code-adjacent input; add egress/tenant isolation controls |
Defender notes
- Self-hosted workerd is the action item: inventory any self-hosted
workerd/Code Mode deployments and pin tov1.20260619.1or later; verify the running version rather than the installed artifact. - For Code Mode specifically: prompt injection is a standing pre-condition. If an agent's Code Mode sandbox can reach declared MCP tools only, verify that
fetch()/connect()are indeed refused (the documented lockdown) and that no binding grants broader access; the research shows the runtime itself, not the tool bindings, was the break point. - Hunting context: cross-tenant read via
URLPatternOOB and anode:zlibUAF-driven host escape will not look like typical edge-app abuse; correlate unusual workerd process crashes / native-code execution anomalies on self-hosted deployments.
Assessment limits
- No in-the-wild exploitation or actor attribution is reported; the two demonstrated attacks are researcher PoCs (public, Black Hat USA 2026).
- The bug count (five, two Critical per Cloudflare) and the per-bug locations (
URLPattern,node:zlib) come from Check Point Research; the full per-bucket CVE/GHSA assignment is not itemized in the writeup captured here.
Related pages
- isolated-vm ExternalCopy type-confusion sandbox escape (GHSA-864f-rcv7-6rh4)
- JSONata arbitrary-code-execution trio (CVE-2026-77413 / -77414 / -77415)
- vm2 NodeVM host state exposure and DNS hijack
- Cloudflare Workers remote Spectre co-located JWT leak
- Agentic workflow trust-boundary failures
Sources
- Check Point Research: When Agentic Glue Melts: Exploiting Cloudflare Code Mode and Workers — published 2026-08-06 (Yarden Porat; Black Hat USA 2026)
- Cloudflare workerd: cloudflare/workerd releases (patched release
v1.20260619.1)