Cloudflare修复了一个漏洞,该漏洞允许一个容器读取另一个客户剩余的磁盘数据。

来源: https://thehackernews.com/2026/09/cloudflare-fixes-flaw-that-let-one.html


Cloudflare Containers 的一个漏洞允许付费客户读取其他客户容器在同一服务器上留下的数据,Cloudflare 和发现该漏洞的研究人员周四表示。

据 Cloudflare 称,这些数据来自之前容器使用并释放的磁盘空间,并非来自任何实时工作负载,攻击者无法选择获取哪些用户的数据。该公司已在其服务中修复了此漏洞,并表示客户无需采取任何行动。

Cloudflare Containers 将客户的程序运行在多个账户共享的服务器上的容器内,服务器的选择权不在客户,而是由 Cloudflare 决定。Cloudflare Sandboxes 也受到了影响,它运行在容器之上,并被宣传为运行不受信任代码(包括 AI 代理编写的代码)的安全场所。

该漏洞由安全公司Accomplish 的 Oren Yomtov 于 9 月 4 日通过 Cloudflare 的漏洞赏金计划报告。

问题出在共享磁盘的配置方式上。每个容器都使用 Linux 的精简配置功能来构建磁盘,该功能以 64 KB 为单位分配存储空间。当容器被删除时,其分配的存储空间会返回到客户账户共享的磁盘池中。

该数据池被设置为在将数据块传递给下一个容器之前不进行擦除,而擦除通常是默认行为。因此,当一个新容器只向一个重用的数据块写入少量数据时,该数据块的其余部分仍然保留着前一个容器的数据。

为了实现这一点,研究人员将一个 4 KB 的小数据块写入未使用的空间,然后直接从磁盘读取整个数据块。他们未写入的 60 KB 空间仍然保留着之前容器中的字节。

在生产测试中,他们报告称在 24 次尝试中的 18 次中发现了残留材料,每次尝试都在 Cloudflare 选择的服务器上进行,并且在四大洲的 22 台底层机器中的 20 台上发现了残留材料。

Cloudflare 表示,恢复的数据块包含目录结构、数据库页面和结构完整的 SQLite 数据库;研究人员自己的报告列出了目录列表、SQLite 数据库、Chromium 浏览器配置文件、.env 文件和凭据文件,并将它们描述为其他客户的文件。

研究人员报告称,他们的分析脚本仅输出计数和格式检查结果,不输出文件内容,并且他们发送给 Cloudflare 的材料不包含任何第三方名称、标识符、凭据或恢复的内容。

Cloudflare表示,他们还确认,恢复的数据在提交后已妥善保管并安全删除。研究人员并未证明该漏洞会更改其他客户的实时数据或导致工作负载离线。

Cloudflare分两步修复了该漏洞。首先,它重新启用了对新分配的区块进行擦除的功能,从而阻止了之前报道的方法;研究人员于9月14日确认,他们的概念验证不再有效。

但这一更改并未清除已映射到正在运行的容器磁盘或每个服务器已准备好的镜像层缓存中的数据块,而新容器可以继承并读取这些缓存。因此,Cloudflare 还停用了所有正在运行的容器磁盘并清除了这些缓存,并在服务器空闲时段清空并重启了服务器。清理工作于 9 月 19 日完成,并在五天后披露了该漏洞。

Cloudflare表示,他们曾查找过其他人使用该方法的迹象。他们根据研究人员的概念验证和自身复制的攻击数据构建了检测特征码,并将其与自身保存的磁盘活动记录进行比对。结果发现,只有研究人员和他们自己的工程师进行了授权测试,没有证据表明其他人使用过这种特定方法。

该调查结果涵盖了 Cloudflare 保留的记录,但并未说明时间跨度或不安全设置首次实施的时间,因此从其描述中无法清楚地了解风险持续了多久。

研究人员分别指出,相同的磁盘配置也影响了 Cloudflare 的 Browser Run 产品。他们表示,这是自 7 月以来他们发现的第六起代码沙箱漏洞,此前 Anthropic 的 Claude Cowork 和 Claude Code、Cursor 的命令行工具、Docker 以及 OpenAI 的 Codex 也存在类似问题。Cloudflare 的公告中提到容器和沙箱受到影响,但并未提及 Browser Run。

Cloudflare 如何解决容器中的跨租户数据泄露漏洞 : https://blog.cloudflare.com/containers-cross-tenant-vulnerability/

2026年9月4日,来自Accomplish的安全研究员Oren Yomtov通过Cloudflare的漏洞赏金计划,负责任地报告了一个影响Cloudflare Containers和Cloudflare Sandboxes(基于Containers构建)的漏洞。Cloudflare已完全修复该漏洞,我们没有证据表明客户数据已被泄露。

本文由 Oren Yomtov 和 Accomplish 安全研究团队合作撰写,他们的详细报告和受控测试帮助我们验证了问题并迅速做出了回应。

Cloudflare Containers 在多租户基础设施上运行工作负载,并自动将其分配到符合条件的服务器;客户无法选择底层主机。研究人员证明,拥有 Workers Paid 帐户的客户可以恢复之前由同一主机上的 Containers 使用的剩余磁盘块。该技术无法针对特定客户、工作负载、主机或数据,并且无法保证一定能恢复剩余数据。

Cloudflare 已在其所有容器服务器上应用了修复程序,无需客户进行任何配置更改。在我们可获取的历史磁盘 I/O 遥测数据中,未发现任何恶意利用的证据。我们能够归因于所报告技术的活动,均来自研究人员和 Cloudflare 工程师进行的授权验证。

在这里,我们将解释潜在的存储行为、其潜在影响、我们的调查以及我们采取的应对措施。

容器存储分配的工作原理

Cloudflare Containers 使用 Linux 设备映射器精简配置 (dm-thin) 为每个容器提供一个可写的根磁盘。​​每个容器都运行在由 Firecracker 虚拟机监控器驱动的专用虚拟机中。Firecracker 将此磁盘作为 /dev/vdc 提供给虚拟机。

精简配置仅在虚拟磁盘写入先前未映射的区域时才分配物理存储空间。受影响的存储池使用了 64 KiB 的精简块大小。当支持容器根磁盘的精简卷被删除时,其物理块被返回到为多个客户帐户的工作负载提供服务的存储池中。

受影响的池配置包含以下选项:

skip_block_zeroing

启用此选项后,dm-thin 会跳过将新分配的块清零的步骤,直接使其可用。因此,当重新分配一个之前使用过的 64 KiB 块时,全块写入会覆盖其原有内容,而较小的写入只会更改已写入的部分。剩余部分可能保留来自该块先前所有者的数据。

漏洞利用原理

读取新薄磁盘的未映射区域未发现残留数据。对于薄磁盘的未映射区域,dm-thin 未分配物理块,返回零值。

概念验证确定了 64 个 KiB 对齐区域,对应于客户机 ext4 文件系统中的可用空间,并将一个对齐的 4 KiB 块写入每个区域。

当写入操作到达未映射的精简块时,dm-thin 会从共享池中分配一个 64 KiB 的物理块。这 4 KiB 的写入操作仅替换了该块的这部分,并且由于块清零功能已禁用,剩余的 60 KiB 可以保留先前容器中的数据。

因此,后续的原始设备读取可能会观察到新容器从未写入过的字节。

概念验证执行了以下步骤:

  1. 使用 Workers Paid 账户创建容器。
  2. 打开位于 . 的可写根磁盘/dev/vdc 。
  3. 读取磁盘并记录基线。
  4. 将一个 4 KiB 的数据块写入每个选定的 64 KiB 区域,该区域对应于 ext4 的空闲空间。
  5. 再次读取生成的数据块。
  6. 仅检查未被新容器覆盖的部分。

提交的数据包括计数、区块偏移量、大小、校验和结果以及截断的哈希前缀。尽管研究人员恢复了原始区块以验证问题,但提供给 Cloudflare 的材料中不包含任何第三方文件名、标识符、凭据、主机名、地址或已恢复的内容值。如下所述,研究人员还确认他们已安全地删除了已恢复的数据。

漏洞是如何验证的

研究人员使用 ext4 目录块校验和来区分属于他们自己为概念验证而创建的测试文件系统的块和来自其他文件系统的块。

当 ext4 使用该metadata_csum 功能时,目录块校验和包含与文件系统和 inode 关联的值。

研究人员在六个生产场所进行了调查,并报告称:

  • 全部 5,614 个可测试目录块。
  • 这些数据块中没有一个是研究人员的文件系统。
  • 通过校验和分析识别出 2,700 个不同的外国目录 inode。

为了验证该方法的有效性,研究人员在用于概念验证的受控测试文件系统中,特意创建并删除了一些数据块,并用该方法进行了测试。结果表明,该方法能够正确地将所有 162 个数据块归类到该文件系统中。

研究人员最终在四大洲的 24 个部署位置中的 18 个以及 22 个底层节点中的 20 个上观察到了残留数据。恢复的数据块类型包括目录结构、数据库页面和结构完整的 SQLite 数据库。研究人员报告称,他们使用的脚本仅输出聚合计数和格式检查结果,而非恢复的文件内容。提交给 Cloudflare 的数据不包含任何恢复的内容值或第三方标识符。研究人员随后确认,他们控制下的恢复数据仍然保密,并在提交后根据 Cloudflare 的 HackerOne 披露政策安全删除。

影响

该漏洞可能允许拥有 Workers Paid 帐户的客户从同一底层主机上其他客户的容器先前使用的存储块中恢复残留数据。

成功利用该漏洞将突破租户隔离边界,并可能泄露文件系统元数据、目录结构、数据库页面和应用程序数据。

然而,攻击者无法选择特定受害者或访问正在连接的磁盘。风险暴露取决于 Cloudflare 的工作负载部署位置以及哪些先前已释放的数据块dm-thin 被重新分配。此外,研究人员并未 证明攻击者篡改了其他客户的活动数据或对工作负载可用性造成了影响。

我们如何缓解漏洞

skip_block_zeroing 我们采取的首要缓解措施是从dm-thin 整个集群的池配置中移除相关设置。这恢复了dm-thin 默认行为,即在将新分配的块暴露给容器之前先将其清除。此举阻止了之前报道的技术,该技术通过一次小写入触发分配,然后通过一次大读取从剩余块中恢复残留数据。研究人员独立证实,在此更改之后,他们的概念验证不再有效。

将新分配的磁盘空间清零并不会清除已映射到现有精简设备中的磁盘块。这些映射存在于运行中的容器磁盘以及每个主机缓存的 OCI 镜像层预置的 dm-thin 快照中。新容器可以从缓存层继承映射,而无需再次分配这些磁盘块,这使得未使用区域中的剩余字节(包括 ext4 空闲空间)可以通过原始读取保持可读/dev/vdc 。

因此,我们也停用了所有正在运行的容器磁盘,并删除了缓解措施实施前创建的缓存镜像快照。我们在非高峰时段清空了主机,重启了每台主机上的虚拟机,并清除了每台主机的镜像缓存,以便使用零分配重新创建磁盘和缓存层。我们已完成整个容器集群的清理工作。

没有证据表明存在活动行为。

作为应对措施的一部分,我们调查了其他工作负载是否表现出与所报告的攻击技术相符的活动。我们审查了容器基础设施中保留的历史磁盘 I/O 遥测数据,并将研究人员的概念验证和我们内部的复现过程作为参考活动。

概念验证揭示了写入和读取之间的一种特殊关系。当 4 KiB 的写入操作到达之前未映射的区域时,可能会触发分配一个可重用的 64 KiB 存储块。在禁用清零功能的情况下,剩余的 60 KiB 可以保留先前容器中的数据。因此,后续的读取操作可以恢复比新容器覆盖的数据量大得多的数据。

利用这些特征,我们开发了检测特征,并将其应用于我们可获取的历史遥测数据。我们识别出了可归因于研究人员和 Cloudflare 工程师进行授权验证的活动,但未发现与所报告的技术相符的其他活动。

我们没有发现任何证据表明其他人利用了这种特定的攻击途径。

Cloudflare客户受到保护

正如上文所述,Cloudflare 已修复此漏洞,Cloudflare 客户无需采取任何进一步措施。此外,我们未发现任何恶意行为者利用此漏洞的证据。

快速透明地推进

我们感谢 Oren Yomtov 和 Accomplish 安全研究团队对本文的深入研究、负责任的披露和协作。我们鼓励 Cloudflare 社区提交任何已发现的漏洞,以帮助我们不断改进产品和平台的安全态势。

我们也深知,您对我们的信任对于您在 Cloudflare 上的基础设施的成功至关重要。我们非常重视这些漏洞,并将继续竭尽全力减轻其影响。我们衷心感谢您对我们平台的持续支持和信任,并将继续致力于在所有工作中优先考虑安全,并在出现问题时迅速、透明地采取行动。