
重大漏洞概述
Node.js 沙箱函式庫 isolated‑vm 被發現存在 GHSA‑864f‑rcv7‑6rh4 高危沙箱逃逸漏洞。攻擊者可利用型別混淆,從受隔離的 JavaScript 沙箱突破至宿主 Host Process,最嚴重情況下甚至能劫持程式控制流程。此缺口已於 7.0.1(7.x 系列)與 6.2.0(6.x 系列)釋出修補。
漏洞成因與技術細節
isolated‑vm 透過 C++ 介面在 V8(Chrome 內建的 JavaScript 引擎)之上建立獨立記憶體空間,以防止沙箱直接存取宿主物件。漏洞發生於 ExternalCopy 於跨境傳送 ArrayBuffer(二進位緩衝區)時的處理流程:
-
程式先讀取
transferList,檢查每項是否為 ArrayBuffer。 -
隨後在真正傳輸階段,未重新檢查型別,直接把該項當成 ArrayBuffer 處理。
攻擊者可設計一個 JavaScript 取值函式,使同一項目在第一次檢查時回傳合法的 ArrayBuffer,第二次讀取時則返回惡意資料。如此一來,isolated‑vm 會把錯誤資料當作 ArrayBuffer 使用,導致對任意記憶體位址的存取,最終造成 宿主行程當機 或 控制流程劫持(程式跳轉至指定函式)。
研究團隊的概念驗證展示了從觸發可控位址的記憶體錯誤、取得宿主位址資訊、偽造記憶體控制結構,到最後讓宿主行程跳轉執行惡意函式的完整鏈條,雖未公開完整攻擊程式碼,但已證明漏洞可被實際利用。
受影響範圍與實務影響
isolated‑vm 每週下載量超過 100 萬次,廣泛應用於自動化、AI 代理執行程式碼的場景,例如 Activepieces、Mastra,以及 n8n 建議的隔離執行環境。實際能否利用此漏洞,取決於宿主程式是否:
- 把 Reference(參考物件)傳入沙箱,或
- 允許攻擊者控制的陣列被加入
transferList。
若上述情況成立,攻擊者即可藉由型別混淆取得對宿主記憶體的寫入權限,對服務穩定性與資料安全造成重大威脅。
修補與未來建議
修補版在 ExternalCopy 複製期間加入 禁止執行 JavaScript 的機制,確保兩次讀取之間不會因取值函式變更資料內容。使用 7.x 系列的開發者應立即升級至 7.0.1,6.x 系列則升級至 6.2.0。
- 快速升級:檢查
package.json中的 isolated‑vm 版本,執行npm install isolated-vm@latest。 - 最小權限原則:避免將任意 Reference 或可被操控的陣列傳入沙箱。
- 監控與測試:在升級後加入單元測試,驗證
ExternalCopy.transferList的型別檢查行為。
此事件再次提醒開發者,沙箱邊界的資料驗證 必須在每一次跨境操作時徹底執行,才能真正保障宿主程式不被惡意代碼突破。未來若有類似的 C++ 介接層漏洞,社群與供應商的快速回應與透明修補將是降低風險的關鍵。