Cross-tenant data exposure in Cloudflare Containers/Sandboxes/Browser Run via Linux dm-thin skip_block_zeroing residual block reuse
Cross-tenant data exposure in Cloudflare (TL-2026-2648), also tracked as Cloudflare Containers residual block exposure, is a high-severity software vulnerability, first published 2026-09-25. It has no confirmed attribution, affects Cloudflare Containers, maps to 9 MITRE ATT&CK techniques (T1005, T1006, T1059.007), and is covered by 9 detection rules and 12 indicators of compromise.
Key facts for TL-2026-2648
- Threat ID
- TL-2026-2648
- Also known as
- Cloudflare Containers residual block exposure, dm-thin skip_block_zeroing disclosure, escaping the Cloudflare Sandbox
- Severity
- HIGH
- Status
- RESOLVED
- Category
- VULNERABILITY
- First published
- 2026-09-25
- Last reviewed
- 2026-09-25
- Attribution confidence
- LOW
- Motivation
- UNKNOWN
- Target sectors
- technology, cloud, multi-tenant-hosted-services, software-as-a-service, serverless-platforms
- Target regions
- Global
- Detection rules
- 9
- Indicators of compromise
- 12
Malware and tooling in Cross-tenant data exposure in Cloudflare
Malware and tooling: Dataleak, ext4
A cross-tenant confidentiality flaw in Cloudflare Containers (and the products layered on it — Cloudflare Sandboxes and Browser Run) let a Workers Paid account recover residual disk data previously written by other customers' workloads on the same host. Root cause was Linux device-mapper thin provisioning (dm-thin) pools configured with skip_block_zeroing, which disabled zeroing of newly allocated 64 KiB blocks: a 4 KiB write to an unmapped region forced allocation of a reused physical block, leaving the remaining ~60 KiB readable via raw reads of /dev/vdc. Oren Yomtov of Accomplish reported it via HackerOne (#3997565); Cloudflare found no evidence of malicious exploitation, removed skip_block_zeroing fleet-wide, retired pre-mitigation disks and cached image snapshots, and completed cleanup on 2026-09-19. No CVE or CVSS was assigned and no customer action was required.
How Cross-tenant data exposure in Cloudflare works
Cloudflare Containers and the higher-level products built on it — Cloudflare Sandboxes (an SDK that runs each sandbox in its own VM for strong isolation) and Cloudflare Browser Run — provide multi-tenant compute in which each customer workload runs in a Firecracker microVM with a writable root disk presented to the guest as /dev/vdc. That root disk is backed by a Linux device-mapper thin-provisioning (dm-thin) pool using a 64 KiB thin-block size. The affected storage pools were configured with the skip_block_zeroing option, which instructs the kernel to skip zeroing newly allocated blocks before they become accessible. Under normal thin provisioning the kernel zeroes a block on first mapping so a tenant can never observe another tenant's prior data; skip_block_zeroing disabled that guarantee.
The result was a cross-tenant residual-data disclosure. When a container's thin volume was deleted, its physical blocks returned to a shared pool serving multiple customer accounts. Because those blocks were not zeroed on reallocation, a subsequent container that triggered allocation of a reused physical block could read the leftover ~60 KiB that its own 4 KiB write did not overwrite. The attack was demonstrated by Oren Yomtov of Accomplish (accomplish.ai) and reported through Cloudflare's HackerOne bug-bounty program as report #3997565 on 2026-09-04. The proof of concept used a legitimate Workers Paid account: open the raw root disk at /dev/vdc, record a baseline, write a single 4 KiB block into each selected 64 KiB-aligned region corresponding to free space in the guest ext4 filesystem, then re-read the blocks and inspect only the portions the new container had not overwritten. Reading a previously unmapped region returned zeroes without allocating a block, but writing 4 KiB into an unmapped region forced dm-thin to allocate a full physical 64 KiB block, leaving 60 KiB of a prior tenant's data recoverable. This is a direct-volume-access primitive (raw reads of /dev/vdc) rather than a VM/container escape in the code-execution sense.
To validate attribution of recovered blocks to foreign tenants, the researchers used ext4 metadata_csum directory-block checksums to distinguish their own filesystem's blocks from foreign ones. Across six production placements they examined 5,614 testable directory blocks, found none attributable to their own filesystem, and identified 2,700 distinct foreign directory inodes; a controlled validation of 162 deliberately created/deleted test blocks was 100% correctly attributed. Residual material was observed on 18 of 24 placements and 20 of 22 underlying nodes spanning four continents. Recovered block types included directory structures, database pages, structurally complete SQLite databases, Chromium browser profiles, .env files, and credential files. The submission contained no third-party filenames, identifiers, credentials, hostnames, or recovered content values, and the researchers confirmed the recovered data was securely deleted in line with HackerOne disclosure policy.
The confidentiality impact crossed the tenant-isolation boundary: an attacker with a Workers Paid account could opportunistically recover residual data from blocks previously used by other customers' workloads on the same underlying host, including filesystem metadata, directory structures, database pages, and application data. The attacker could not select a victim, access an actively attached disk, modify another customer's live data, or affect workload availability, and residual data was not guaranteed to be present (placement was automatic and opportunistic). Cloudflare remediated by removing skip_block_zeroing from the dm-thin pool configuration fleet-wide, which stopped new residual exposure and was independently confirmed by the researchers; because that change did not sanitize blocks already mapped into existing thin devices or cached dm-thin snapshots of OCI image layers, Cloudflare additionally retired all running container disks, removed cached image snapshots created before mitigation, drained hosts off-peak, restarted VMs, and cleared each host's image cache so all disks and cached layers were recreated with zeroed allocations. Cleanup of all pre-mitigation cached snapshots completed on 2026-09-19.
Cloudflare reported no evidence of any malicious actor abusing the vulnerability; retained disk-I/O telemetry was scanned against the attack's signature (a 4 KiB write to a previously unmapped region triggering allocation of a reused 64 KiB block, followed by reads recovering substantially more data than the container wrote), and only researcher and internal validation activity matched. No CVE was assigned and no CVSS score was published. The disclosure notes this is the sixth sandbox/isolation escape Accomplish has published since July 2026, following escapes from Claude Cowork (SharedRoot), Claude Code (Beltdown), Cursor CLI (Beltdown2), Docker's hypervisor, and an OpenAI Codex sandbox — underscoring that multi-tenant isolation can fail in many ways, including at the storage layer. The underlying Linux behavior is documented upstream: the dm-thin target sets discard_zeroes_data_unsupported because partial discards are not guaranteed to be zeroed before reuse, so secure erase must be explicit.
MITRE ATT&CK techniques used in TL-2026-2648
Collection
T1005 Data from Local System; T1074.001 Data Staged: Local Data Staging
stealth
Execution
T1059.007 Command and Scripting Interpreter: JavaScript
Initial Access
T1078.004 Valid Accounts: Cloud Accounts
Discovery
T1082 System Information Discovery
Credential Access
T1539 Steal Web Session Cookie; T1552.001 Unsecured Credentials: Credentials In Files; T1555.004 Windows Credential Manager
Affected products and versions in Cross-tenant data exposure in Cloudflare
- Cloudflare — Containers
Vulnerable versions: all multi-tenant dm-thin pools configured with skip_block_zeroing prior to 2026-09-04
Fixed in: fleet-wide block-zeroing rollout (completed 2026-09-07); post-cleanup state (cleanup completed 2026-09-19) - Cloudflare — Sandboxes
Vulnerable versions: all Sandboxes running on Cloudflare Containers prior to 2026-09-04
Fixed in: remediated via the Containers fleet-wide fix - Cloudflare — Browser Run
Vulnerable versions: all Browser Run workloads sharing the affected disk implementation prior to 2026-09-04
Fixed in: remediated via the Containers fleet-wide fix
Remediation for Cross-tenant data exposure in Cloudflare
Immediate actions
- Remove skip_block_zeroing from all dm-thin pool configurations to restore default zeroing of newly allocated blocks (fleet-wide fix)
- Retire all running container disks created before mitigation and remove cached image snapshots that could still expose residual bytes in unused regions
- Scan retained historical disk-I/O telemetry for the residual-block-reuse signature (4 KiB write to unmapped region + oversized read recovering more than written) to rule out malicious activity
- Under your own risk policy, consider rotating secrets/cookies that may have resided in recovered data types (.env, credential files, Chromium profiles)
Longer-term hardening
- Ensure thin-provisioning pools always zero newly allocated blocks before tenant access
- Redesign the block lifecycle so freed physical blocks are never returned to a shared cross-tenant pool without zeroing
- Adopt managed block-storage abstractions that guarantee isolation at the storage layer rather than relying on configuration defaults
- Treat discard/TRIM semantics as non-guaranteeing: rely on explicit secure erase (e.g. blkdiscard with zeroing, or filesystem-level secure deletion) for decommissioned volumes
- Add automated configuration guards that reject pool options (like skip_block_zeroing) in multi-tenant storage stacks
Weaknesses (CWE) in Cross-tenant data exposure in Cloudflare
CWE-226, CWE-212, CWE-200
Timeline of Cross-tenant data exposure in Cloudflare
- Fleet-wide rollout of the block-zeroing fix began (23:15 UTC) the same evening as the report.
- Runtime fix and block-reuse test merged (21:27 UTC); changes for new and live dm-thin pools merged (22:03 UTC).
- Cloudflare opened a security incident and confirmed the production setup (18:45 UTC), roughly 3 hours after submission.
- Oren Yomtov (Accomplish) submitted the cross-tenant data exposure finding via Cloudflare's HackerOne bug-bounty program (report #3997565, 15:26 UTC).
- Rollout completed (06:13 UTC); clearing of old pool data began.
- Bounty awarded to the researcher (12:52 UTC); the amount was not disclosed.
- Researchers confirmed the proof of concept no longer worked after the fix (10:50 UTC), since skip_block_zeroing was removed.
- Cleanup of all pre-mitigation cached image snapshots completed (15:03 UTC), fully remediating residual-data exposure.
- Cloudflare published the disclosure 'Cross-tenant data exposure in Cloudflare Containers (and how we fixed it)' jointly with the researchers; Accomplish published 'Escaping the Cloudflare Sandbox'.
Sources cited for Cross-tenant data exposure in Cloudflare
- Cloudflare Blog: Cross-tenant data exposure in Cloudflare Containers (and how we fixed it)
- Accomplish research: Escaping the Cloudflare Sandbox
- HackerOne report #3997565
- Cybersecurity News: Cloudflare Containers Vulnerability Could Leak Data Between Customer Workloads
- Cyber Kendra: Cloudflare Containers Flaw Exposed Cross-Tenant Disk Data
- Linux kernel documentation: Device-mapper thin provisioning
- Linux kernel commit 307615a2: thin pool must set discard_zeroes_data_unsupported
- Cloudflare Sandbox security model documentation
- Cloudflare Containers architecture documentation
- Firecracker microVM documentation
- MITRE CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
- MITRE CWE-212: Improper Removal of Sensitive Information Before Storage or Transfer
- MITRE CWE-226: Improper Release of Shared Resource Before Use
More in vulnerability
- Critical ServiceNow AI Platform Vulnerabilities: Unauthenticated SQL Injection and Authorization Bypasses (CVE-2026-13016, CVE-2026-86857-86860)
- Cloudflare Containers cross-tenant residual disk data exposure via device-mapper thin-provisioning skip_block_zeroing
- SalesBleed: Salesforce Agentforce vulnerabilities enable zero-click CRM data theft and trusted-agent Slack phishing
- CISA KEV Additions (2026-09-24): WSO2 JWT Authentication Bypass (CVE-2026-5430, CVSS 10.0) and Adobe Commerce/Magento Incorrect Authorization (CVE-2026-71362, CVSS 9.1) Actively Exploited
- cPanel/WHM CalDAV/CardDAV and WP Toolkit Flaws Enable Cross-Account Access and Root Privilege Escalation (CVE-2026-68490, CVE-2026-87899, CVE-2026-87900)
Detection coverage for TL-2026-2648
As of 2026-09-25, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-2648 across Splunk SPL, Microsoft KQL and Sigma, covering 12 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.