---
title: "Cloudflare Containers 跨租戶資料外洩漏洞：dm-thin 未清零的殘留磁碟區塊"
url: https://sammy.hk/cloudflare-containers-%e8%b7%a8%e7%a7%9f%e6%88%b6%e8%b3%87%e6%96%99%e5%a4%96%e6%b4%a9%e6%bc%8f%e6%b4%9e%ef%bc%9adm-thin-%e6%9c%aa%e6%b8%85%e9%9b%b6%e7%9a%84%e6%ae%98%e7%95%99%e7%a3%81%e7%a2%9f/
author: Ethan
published: 2026-09-26T12:47:00+08:00
modified: 2026-09-25T08:57:15+08:00
description: "Cloudflare 於 2026 年 9 月 24 日披露，其 Cloudflare Containers（以及建基其上的 Cloudflare Sandboxes）存在一個跨租戶資料外洩漏洞。官方表示已完成修補，並無證據顯示客戶資料曾被入侵。[1] 上報與影響範圍 官方指出，漏洞由 Accomplish 安全研究員…"
categories: ["開放源碼"]
tags: [Cloudflare, dm-thin, Firecracker, "多租戶", "安全漏洞", "資料隔離"]
source: https://sammy.hk
---
Cloudflare 於 2026 年 9 月 24 日披露，其 Cloudflare Containers（以及建基其上的 Cloudflare Sandboxes）存在一個跨租戶資料外洩漏洞。官方表示已完成修補，並無證據顯示客戶資料曾被入侵。\[1\]

## 上報與影響範圍

官方指出，漏洞由 Accomplish 安全研究員 Oren Yomtov 於 2026 年 9 月 4 日經 Cloudflare 的漏洞賞金計劃負責任地通報，相關公告文章與該研究團隊合作撰寫。研究員示範，持有 Workers Paid 帳戶的客戶可以讀取同一主機上曾被 Containers 使用的殘留磁碟區塊；該技術無法針對特定客戶、工作負載、主機或資料，而殘留資料的存在並不保證。\[1\]

Cloudflare Containers 在多租戶基建上執行工作負載，並自動分配到合資格伺服器，客戶無法選擇底層主機。\[1\]\[2\] 官方表示已於整個 Containers 叢集套用修正，客戶毋須更改任何設定。\[1\]

## 技術成因

官方解釋，每個容器都在由 Firecracker 虛擬機監視器驅動的專用虛擬機內運行，透過 Linux device mapper thin provisioning（dm-thin）取得可寫入的根磁碟，並以 `/dev/vdc` 呈現。\[1\]

精簡配置只在虛擬磁碟寫入未映射區域時才分配實體儲存；受影響的儲存池使用 64 KiB 精簡區塊。當容器根磁碟對應的精簡磁碟區被刪除，其物理區塊會回到由多個客戶帳戶工作負載共用的儲存池。問題源於該儲存池設有 `skip_block_zeroing` 選項：dm-thin 在把新分配的區塊開放之前會跳過清零，於是當一個曾使用的 64 KiB 區塊被重新分配，全區塊寫入會取代其舊內容，但較小的寫入只會改動被寫入的部分，其餘部分可能保留前一位擁有者的資料。\[1\]

## 漏洞如何被利用

官方指出，讀取新精簡磁碟的未映射區域不會洩露殘留資料，因為 dm-thin 會回傳零而不分配實體區塊。因此概念驗證先找出對應客體 ext4 檔案系統空閒空間的 64 KiB 對齊區域，並向每個區域寫入一個對齊的 4 KiB 區塊。\[1\]

當這類寫入觸及未映射的精簡區塊，dm-thin 便從共用儲存池分配一個 64 KiB 實體區塊；4 KiB 寫入只取代該部分，而由於區塊清零被停用，其餘 60 KiB 可能保留先前容器的資料。之後對原始裝置的讀取，便能觀察到新容器從未寫入過的位元組。\[1\]

## 驗證與限制

研究員以 ext4 目錄區塊校驗（`metadata_csum`）區分屬於他人檔案系統的區塊。在六個生產配置中，5,614 個可測試目錄區塊全部不屬於研究員自己的檔案系統，並透過校驗分析識別出 2,700 個外來目錄 inode；作為方法驗證，他們在自己刻意建立再刪除的測試檔案系統上，方法正確地把全部 162 個區塊歸屬於該檔案系統。\[1\]

官方提到，交給 Cloudflare 的材料並不包含第三方檔案名稱、識別碼、憑證、主機名稱、地址或還原內容的值；研究員亦已確認安全刪除所還原的資料。\[1\]

## 修補過程

Cloudflare 的第一步修補，是從整個叢集的 dm-thin 儲存池設定中移除 `skip_block_zeroing`，恢復 dm-thin 在把新分配區塊開放給容器之前先行清除的預設行為，藉此阻止「小寫入觸發分配、大讀取取回殘留資料」的手法；研究員其後獨立確認其概念驗證已失效。\[1\]

官方發現，清零新分配區塊並不足以清理已映射到現有精簡裝置的區塊：這些映射存在於運行中的容器磁碟，以及每部主機為 OCI 影像層預備的 dm-thin 快照快取之中；新容器可從快取層繼承映射而不重新分配區塊，令未使用區域（包括 ext4 空閒空間）的殘留位元組仍可透過讀取 `/dev/vdc` 取得。因此官方再淘汰所有運行中的容器磁碟，並移除修補前建立的映像快照：在離峰時段排空主機、重啟每部主機的虛擬機，並清空每部主機的映像快取，令磁碟與快取層以清零分配重建。官方表示整個 Containers 叢集的清理已完成。\[1\]

## 濫用調查

作為應對的一部分，Cloudflare 檢視保留的歷史磁碟 I/O 遙測，以研究員的概念驗證與內部重現作為參考活動，判斷是否有其他工作負載出現一致的行為：概念驗證會在 4 KiB 寫入觸及先前未映射區域時觸發重用 64 KiB 區塊的分配，其後讀取可取得遠多於新容器覆寫的資料。官方據此特徵建立偵測簽名並套用於歷史資料，結論是沒有發現惡意利用的證據；可歸因於該技術的活動來自進行授權驗證的研究員與 Cloudflare 工程師。\[1\]

## 參考資料

\[1\] [Cloudflare 官方部落格 — How Cloudflare addressed a cross-tenant data exposure vulnerability in Containers（2026 年 9 月 24 日）](https://blog.cloudflare.com/containers-cross-tenant-vulnerability)

\[2\] [Cloudflare 官方文件 — Cloudflare Containers](https://developers.cloudflare.com/containers/)

### 相關文章：

1. [Cloudflare 改預設：新網域今起封鎖 AI 訓練與代理爬蟲](https://sammy.hk/cloudflare-%e6%94%b9%e9%a0%90%e8%a8%ad%e6%96%b0%e7%b6%b2%e5%9f%9f%e4%bb%8a%e8%b5%b7%e5%b0%81%e9%8e%96-ai-%e8%a8%93%e7%b7%b4%e8%88%87%e4%bb%a3%e7%90%86%e7%88%ac%e8%9f%b2/ "Cloudflare 改預設：新網域今起封鎖 AI 訓練與代理爬蟲")
2. [Linux Forum Asia 2005 之後感](https://sammy.hk/linux-forum-asia-2005-%e4%b9%8b%e5%be%8c%e6%84%9f/ "Linux Forum Asia 2005 之後感")
3. [重新安裝 Serendipity](https://sammy.hk/reinstall-serendipity/ "重新安裝 Serendipity")
4. [近期喜歡上搞 Web Application](https://sammy.hk/interests-to-code-webapp/ "近期喜歡上搞 Web Application")
