isolated-vm 7.0.1 修補重大沙箱逃逸漏洞,攻擊者可劫持宿主控制流程

Node.js 沙箱函式庫 isolated-vm 被揭露重大沙箱逃逸漏洞 GHSA-864f-rcv7-6rh4。研究團隊指出,攻擊者可利用資料處理過程中的型別混淆問題,讓原本受隔離的 JavaScript 程式碼突破沙箱限制,進而影響執行沙箱的宿主行程(Host Process)。

研究團隊在概念驗證中不僅讓宿主行程當機,也進一步實現控制流程劫持,使程式跳轉到指定位置執行函式。isolated-vm 已透過 7.0.1 與 6.2.0 版本修補此漏洞。

漏洞位於跨隔離邊界的 C++ 介接程式碼

isolated-vm 的用途,是在 Node.js 中安全執行不受信任的 JavaScript。它會為沙箱建立獨立的 V8 隔離環境,讓沙箱使用自己的記憶體空間,並限制其直接存取宿主物件。

此次問題並非 V8 隔離機制本身遭到突破,而是發生在 isolated-vm 負責跨越隔離邊界傳送資料的 C++ 介接程式碼。漏洞與資料從沙箱傳送至宿主時的處理流程有關,特別是直接轉移 ArrayBuffer 資料的機制。

兩次讀取資料造成型別混淆

當程式透過 ExternalCopy 的 transferList 指定要轉移的內容時,isolated-vm 會讀取該清單兩次。第一次讀取用於確認項目是否為 ArrayBuffer,但第二次實際使用資料時,程式並未重新檢查型別,而是直接將項目當成 ArrayBuffer 處理。

攻擊者可以設定 JavaScript 取值函式,讓同一個項目在第一次讀取時回傳合法的 ArrayBuffer,通過型別檢查後,第二次讀取時再替換成其他內容。isolated-vm 可能因此把錯誤資料當成 ArrayBuffer 使用,並存取攻擊者可影響的記憶體位址。

這類錯誤可能造成宿主行程當機,或進一步改變程式的執行方向。研究團隊表示,完整攻擊程式並未公開。

概念驗證可進一步劫持執行流程

研究團隊的概念驗證流程,先讓宿主行程產生可控制位址的記憶體錯誤,再透過緩衝區操作取得宿主位址資訊,建立假的記憶體控制結構,最後讓宿主行程跳轉至指定位置呼叫函式。

這項結果顯示,漏洞影響不僅限於單純的沙箱內錯誤或宿主行程崩潰;在特定條件與攻擊鏈成立時,攻擊者可能進一步影響宿主程式的控制流程。不過,實際能否利用仍取決於應用程式如何使用 isolated-vm。

AI 代理與自動化工具可能受到關注

isolated-vm 每周下載量超過 100 萬次,並被用於自動化及 AI 代理執行程式碼的場景。來源指出,Activepieces 與 Mastra 等專案使用了 isolated-vm,n8n 也曾建議在隔離環境中執行程式碼時採用該函式庫。

然而,漏洞是否能在特定部署中被實際利用,仍有明確前提,包括宿主程式是否曾將 Reference 傳入沙箱,以及是否會把攻擊者可控制的陣列交給 transferList 處理。因此,使用相關函式庫的應用程式需要根據自身資料流與沙箱介面評估風險。

修補版本與升級建議

修補版本會在 ExternalCopy 複製資料期間禁止執行 JavaScript,避免取值函式等機制在前後兩次讀取之間改變資料內容,藉此降低型別檢查與實際使用結果不一致的風險。

  • 使用 7.x 版本的專案:應升級至 7.0.1
  • 使用 6.x 版本的專案:應升級至 6.2.0

對於以 isolated-vm 執行不受信任程式碼的 Node.js 應用程式,應優先確認目前版本、檢視是否使用 Reference 與 transferList,並在可行時完成修補版本升級。

Reference Link : ithome.com.tw

Related Articles

Stay Connected

0FansLike
0FollowersFollow
22,800SubscribersSubscribe
spot_img

Latest Articles