摘要: Cloudflare 於 2026 年 8 月 19 日刊出的研究指出 DyPrIs 實作存在限制,並在 Workers 生產環境示範遠端 Spectre 攻擊,記憶體外流最高達 12 bit/s、準確度 99%。攻擊在論文公開前已修補,過去三年也未見實際利用。Cloudflare 同時強化 DyPrIs,並整合 V8 Sandbox 與程序內隔離機制。
Spectre 為何需要再看一次?
早在 2021 年,Cloudflare 就針對 Workers 面臨的遠端 Spectre 攻擊做過一次評估,隨後上線了名為 Dynamic Process Isolation(DyPrIs)的生產防禦,做法是從腳本裡挑出行跡可疑者,挪進各自的程序執行。此後幾年,讓 Spectre 攻擊變得穩定可行的手法持續翻新,Cloudflare 於是安排在 2024 年至 2025 年年初於內部再跑一輪評估,檢驗這些新手法會不會危及 Workers 的生產環境。
2026 年 8 月 19 日,Cloudflare Blog 刊出文章,當中的研究團隊指出 DyPrIs 的實作存在一處限制,並且真的在 Workers 生產環境裡示範了遠端 Spectre 攻擊——記憶體內容以最高 12 bit/s 的速率外流,準確度達 99%。所幸在論文公開之前,這個攻擊就已修補完成;回顧先前三年,也找不到任何遭實際利用的痕跡。
Workers 的隔離設計如何遇上 Spectre
在邊緣網路上,Cloudflare Workers 跑的是不受信任的 JavaScript,語言層級的隔離由 V8 isolate 負責,數以萬計的租戶因此能共用同一個作業系統程序。每個 Worker 拿到的是自己專屬的 JavaScript heap,啟動延遲得以保持在低檔,整體效率也勝過把每個租戶放進完整程序的做法。
代價同樣明顯:同一個 Worker 程序裡若存在一個任意讀取漏洞,跨租戶的資料便有外流可能。在這類漏洞之中,Spectre 屬於最棘手的一種,原因在於它攻擊的是 CPU 推測執行(speculative execution)的本質。
Cloudflare 以登山解釋推測執行:行至岔路,先憑猜測選一條往前走;猜中便省下時間,猜錯雖得折返,泥土上卻已印下足跡。CPU 的行為如出一轍——分支預測失準時,推測結果會被丟棄,快取狀態卻已經回不去了。這份殘留正好讓攻擊者有機可乘,把記憶體內容轉寫成快取延遲上的落差。
計時器、多執行緒與共享記憶體本來就在 Workers 平台上受到限制,傳統 Spectre 攻擊因此更難施展。儘管如此,研究團隊仍找到了繞開這些限制的途徑。
生產環境裡如何讓攻擊站得住腳?
想讓攻擊在 Workers 上如願奏效,有四道難題得先過關:讓攻擊者與受害者的 isolate 被排程進同一台邊緣伺服器的同一個程序、弄到一枚可靠的遠端計時器、在生產環境的雜訊中把訊號穩定放大,再來是把快取驅逐做得夠可靠。
研究團隊動用了兩種 Spectre gadget:其一負責洩出壓縮過的 heap 指標,isolate 的 heap 基底位址便是一例;另一個則藉推測型別混淆(speculative type confusion),沿著攻擊者掌控的 64 位元指標對記憶體任意讀取。在那個時間點,Cloudflare Workers 尚未採用 V8 Sandbox,TypedArray 裡存放的仍是未經處理的 64 位元 backing store 指標,恰好成了下手目標。
放大訊號是整場攻擊的成敗所繫。快取命中與未命中之間不過差幾奈秒,遠端計時器的雜訊卻落在微秒、甚至毫秒的量級。團隊採用 Stephen Röttger 與 Artur Janc 找出的手法,借助 L1 快取的 tree-based PLRU 替換策略,讓單一快取事件造成的時間差被拉大到遠端計時器也分辨得出來。
計時的部分,一條 WebSocket 接上外部伺服器就足以應付。論文評估過數種計時器設定,縱使隔著不小的拓撲距離,中位數解析度仍能壓到次毫秒。
反覆測量時,正統路數是先建出 eviction set 來驅逐指定快取行,但這條路得靠大量精準的計時測量,換成遠端計時器就昂貴得多。Dougall Johnson 想出更漂亮的辦法:配置遠超過快取容量的記憶體,每一輪都隨機換新的位置,靠鴿籠原理保證目標幾乎必然已不在快取裡。研究團隊在 JavaScript 中配置了超出 last-level cache 規模的物件池,每輪測量挑選一組新的 attacker 與 victim 物件。
修補進展與給產品開發者的啟示
這份研究換來的直接改變,是 Cloudflare 強化了 DyPrIs,並把 V8 Sandbox 與一套 in-process 隔離機制整合進來,讓記憶體洩漏風險再往下壓。論文出自 Albert Pedersen、Haocheng Xiao、Sam Ainsworth、Nigel Topham 與 Martin Schwarzl 五人合力。
站在產品建構者的角度,有幾件事值得放在心上。首先,共用執行環境帶來的效率紅利,幾乎總伴隨著隔離邊界上的複雜度——Workers 拿 V8 isolate 換到低延遲與高密度,代價是 Spectre 這種微架構攻擊會不斷質疑這個前提。再者,防禦機制不能做完就放著,得定期重審:DyPrIs 在 2021 年確實管用,但攻擊手法會持續前進,實作細節裡也可能藏著盲點。最後,在生產環境中實際演示攻擊,說服力遠勝紙上推演——正因為 Cloudflare 選擇在真實的 Workers 環境中打造 proof-of-concept,風險才估得準,修補效果也驗證得了。
手上若正在規劃多租戶的 AI 或 serverless 服務,這份研究給的提醒很直接:安全模型撐不起單靠一層防禦的賭注,語言層級隔離、程序隔離、沙箱,加上不間斷的攻擊模擬,必須彼此搭配。而當你為了效能讓租戶共享資源時,最壞情況下資料外洩的風險究竟有多大,心裡必須有數。
Cloudflare 的結論是攻擊已被緩解,且沒有發現實際利用。這不代表從此能高枕無憂:Spectre 一類攻擊的研究腳步未停,下一輪重新評估說不定又會翻出新的缺口。
