Build1 publisher2 min readPublished
Cloudflare Containers handed tenants reused disk blocks that could hold other customers' data
Cloudflare Containers let a paying tenant read up to 60KiB of another customer's leftover data from each reused 64KiB disk block. Cloudflare has zeroed new blocks and rebuilt pre-fix disks, so the risk still open is plaintext credentials stored there earlier.
The Engineer · Build desk

What happened
- The cause was a dm-thin storage pool with skip_block_zeroing set, so a tenant's 4KiB write claimed a fresh block without wiping the rest of it.
- Any Workers Paid customer running Containers or Sandboxes could exploit it from inside its own environment, with no credentials for other tenants.
- Repeated allocations could gather more fragments, but not every block held leftover data and no specific victim could be chosen.
- Public reports show no access to hosts or other tenants' running disks, no tampering with active disks, and no denial of service.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint A customer cannot clear itself using its own logs or EDR, so any finding about its data depends on Cloudflare's notice and its own record of what it stored and when.
- exposure Customers whose usage predates Cloudflare's telemetry retention have periods that the no-exploitation finding does not reach and that cannot be checked against Cloudflare's telemetry.
- precedent Any operator running a thin-provisioned multi-tenant pool with skip_block_zeroing faces the same two-step cleanup, because turning zeroing on protects only blocks allocated afterwards.
A 4KiB write to unallocated space on a tenant's virtual disk caused Linux dm-thin to claim a 64KiB block from a physical pool that other tenants had used before [2]. The pool ran with skip_block_zeroing set, and the flag did exactly what its name says [2]. The tenant then read its own raw device, /dev/vdc, and got back the 60KiB it had not written [3]. After a 4KiB write, 60 of the block's 64KiB, or 93.75 percent, could belong to a previous tenant [1].
Cloudflare described the flaw in a post dated 2026-09-24, which was summarized on dev.to [16]. According to that summary, a fragment is only useful if it happens to hold sensitive material and can be interpreted and pieced back together [6]. The summary still rates the flaw High because it breaks the confidentiality boundary between tenants [15]. It also describes the testing on production infrastructure as authorized research [17].
The fix is careful work. Cloudflare turned on zero-initialization for new dm-thin allocations, and customers do not have to change any setting themselves [7]. Zeroing at allocation time does not erase blocks that were allocated before the change. So Cloudflare also discarded and recreated the pre-fix disks and cached snapshots [8].
Victims have little to inspect. Their containers may show no errors, and their standard logs may not record a read made against a block after it was reassigned to another tenant [10]. Their EDR generally cannot see a raw block read that happens inside someone else's container, and web and DNS logs will not show the reuse [11]. The summary names three main ways to confirm exposure: Cloudflare's notifications, the customer's usage period and an inventory of stored data [10].
Cloudflare found no evidence of malicious exploitation in the telemetry it retained. The summary notes that this does not rule out exploitation outside the retention period or beyond what the telemetry covers [9]. Rebuilding the disks stops new reads, but it cannot recall a fragment someone already copied [8]. I think any long-lived credential that sat in plaintext on Containers or Sandboxes storage during a customer's usage period should be rotated, and its recent use checked at the identity provider [13]. The summary's standing advice is to keep plaintext long-term credentials off both persistent and temporary storage, and to use short-lived credentials and encryption [12].
What to watch
- Cloudflare stating the date skip_block_zeroing was first set on these pools, the start of every customer's exposure window.
- The content of Cloudflare's notifications to affected customers, and whether they name accounts or time ranges.
- The Accomplish write-up and BleepingComputer's coverage, for any account of how much data the research actually recovered.