新聞

Node.js沙箱函式庫vm2出現重大沙箱逃逸漏洞CVE-2026-26956,受影響版本為3.10.4,修補版本為3.10.5。GitHub安全公告顯示,該漏洞嚴重性等級為重大,CVSS v3.1分數為9.8,攻擊者若能將經過特殊設計的程式碼交由VM.run()執行,就可能跳出沙箱,並在主機端執行命令。PoC片段與poc.js檔案現已於GitHub公開,建議使用者升級至vm2 3.10.5或更新版本。

vm2用途是讓Node.js應用程式在受限制環境中執行不受信任的JavaScript程式碼,常見情境包括線上程式執行、SaaS應用的使用者腳本以及自動化工具等,透過隔離沙箱內程式碼,避免其直接存取主機端的程序、檔案系統或其他敏感Node.js API。

CVE-2026-26956破壞了vm2的隔離特性,官方確認問題可在Vm2 3.10.4搭配Node.js v25.6.1的x64 Linux環境觸發,觸發條件是攻擊者控制傳入VM.run()的程式碼,且Node.js版本具備WebAssembly例外處理與JSTag支援。

vm2的防護仰賴JavaScript層的程式碼轉換與跨環境物件代理機制,而該漏洞攻擊路徑則透過WebAssembly在更低層級捕捉例外,使主機端產生的TypeError未經vm2清理就回到沙箱內。攻擊程式可再沿著該物件的建構子關係,取得主機端的程序物件,進而呼叫child_process執行主機命令。

在此之前,vm2今年初也曾揭露沙箱逃逸漏洞CVE-2026-22709,由於Promise.prototype.then與Promise.prototype.catch的callback清理機制可被繞過,攻擊者可能藉此逃脫沙箱隔離機制,並執行任意程式碼。受影響版本為3.10.0及更早版本,vm2已在3.10.2修補,嚴重性同樣達重大等級。