Cloudflare Containers 跨租户数据残留漏洞暴露 60KiB 未清零块

导语

Cloudflare 于 2026 年 9 月 28 日公开 Containers 与 Sandboxes 服务中的一处跨租户数据暴露漏洞:共享存储池未对复用的 64KiB 存储块清零,Workers 付费账户可借此读取其他租户容器遗留的数据。可能暴露的内容包括目录列表、SQLite 数据库、Chromium 配置、.env 文件与凭据文件。厂商已在 9 月 19 日完成全部缓解措施。

事件概述

  • 受影响服务:Cloudflare Containers 与 Sandboxes(Workers 付费计划功能)
  • 影响性质:租户隔离边界失效,存在只读的数据残留读取风险
  • 发现者:安全研究员 Oren Yomtov(Accomplish),2026 年 9 月 4 日经 HackerOne 报告
  • 修复时间:厂商称已于 2026 年 9 月 19 日完成全部缓解,自动应用,客户无需操作

技术细节

问题出在共享存储池的配置。当某个容器根磁盘对应的精简卷(thin volume)被删除时,其物理块会返回一个服务多个客户账户的公共池。该池的配置跳过了对复用 64KiB 块的清零步骤,于是出现如下可被利用的窗口:攻击者向新容器磁盘的未使用区域只写入 4KiB 数据,就会触发分配一个此前被其他客户使用过的 64KiB 物理块;由于没有清零,只有这 4KiB 被覆盖,剩余约 60KiB 仍保持上一租户数据的原貌,处于可读状态。

# 漏洞条件(概念示意)
1. 容器 A 磁盘删除 -> 64KiB 物理块回收到多租户共享池
2. 池配置跳过块清零(未写入零值)
3. 容器 B 只写 4KiB -> 分配给同一物理块
4. 剩余约 60KiB 仍为容器 A 的残留数据,可被读取

研究员在 24 次容器放置中于 18 次观察到残留,在 22 个被测节点中有 20 个出现同类情况,其中包含结构完整的 SQLite 数据库与文件系统元数据。

影响评估

该漏洞的限制条件是明确的:攻击者无法指定受害者、无法访问正在被挂载使用的磁盘、无法修改其他客户的数据,也无法干扰其工作负载。因此它的性质是信息泄露而非篡改或拒绝服务。但 60KiB 的残留足以泄漏目录结构、数据库页、浏览器配置、环境变量文件与凭据存储,对多租户云平台而言,这本身就意味着隔离边界失效。

Cloudflare 表示,研究过程中使用的脚本只做检查并返回聚合计数,未读取真实客户数据;厂商在复查日志、遥测与历史数据后,也未发现该方法被用于暴露客户数据的证据。研究员的测试并未展示任何可修改他人数据或干扰其工作负载的手段。

修复建议

  • Cloudflare 已自动完成修复,客户侧无补丁或重新部署动作;如仍使用 Containers,确认控制台无相关通知即可。
  • 若在问题窗口期内曾于 Cloudflare 容器中处理敏感凭据,出于保守考虑建议轮换这些凭据——即便厂商未发现泄漏证据。
  • 对自建或自选共享容器平台,应核查三件事:块层是否对复用块强制清零、卷销毁流程是否真正回收物理介质、快照缓存是否仍引用旧的块映射。
  • 把「租户隔离验证」纳入云基础设施测评项,重点测试存储层而非仅测试应用层权限。
  • 需要留意的是,该漏洞说明「容器已删除」与「其磁盘已被清空」在共享存储架构下并不是同一件事,任何多租户方案都应显式验证这一点。

参考来源