開源JavaScript沙箱函式庫SandboxJS揭露重大漏洞CVE-2026-25881,攻擊者要是能在受害系統中執行沙箱內的不受信任程式碼,可能藉由沙箱逃逸改寫宿主程序的內建原型(Prototype),造成持久性的原型汙染。在宿主應用程式後續把遭汙染的屬性帶入敏感呼叫點的情況下,風險可能進一步升高到遠端程式碼執行(RCE)。GitHub資安通報指出受影響套件為NPM上的@nyariv/sandboxjs,早於0.8.31版的版本都受影響。

CVE-2026-25881漏洞被標示為重大等級,CVSS v3.1分數為9.1,問題根源在於SandboxJS用一個名為isGlobal的保護旗標,試圖阻止沙箱內程式碼改寫全域物件或其原型。不過,當全域原型參照在陣列常值(Array Literal)或物件常值的建立過程中被傳遞與取回時,該保護旗標可能在轉換流程中遺失,導致原本應被阻擋的原型寫入不再被攔截。也就是說,沙箱邊界本應隔離宿主的內建原型,但在特定資料流路徑下出現可被繞過的漏洞。

一旦攻擊者能在沙箱內改寫宿主的內建原型,影響不只限於單次運算結果,而可能形成在同一宿主程序中持續的狀態汙染。官方以Map.prototype與Set.prototype為例,指出不受信任的沙箱程式碼可藉由寫入這類內建原型破壞隔離,進而影響同一宿主程序中後續執行的其他邏輯。該漏洞對採用沙箱執行使用者腳本或外部規則的系統特別危險,因為其安全假設往往建立在沙箱可以阻絕宿主狀態被任意改寫之上。

宿主端原型汙染本身可能影響同一個執行程序中的後續邏輯,官方也提到,當宿主應用程式把遭汙染的屬性值帶入可執行系統命令等敏感呼叫點,例如Node.js的child_process.execSync,風險可能進一步升高到RCE。

SandboxJS維護者已在0.8.31修補該漏洞,使用者應優先升級到0.8.31或更新版本。要是短期內受相依限制無法升級,官方也提出防禦縱深作法,例如在宿主程序執行不受信任程式碼之前先凍結內建原型,降低被改寫的風險。不過此作法可能造成相容性破壞,導入前仍需在測試環境評估對既有行為的影響。

熱門新聞

Advertisement