SandboxJS の脆弱性 CVE-2026-25881 が FIX:リモート経由でのホスト奪取の恐れと PoC の公開

Critical SandboxJS Vulnerability Allows Remote Host Takeover – PoC Released

2026/02/11 CyberSecurityNews — JavaScript ライブラリ SandboxJS に、深刻なサンドボックス・エスケープの脆弱性が発見された。脆弱性 CVE-2026-25881 (CVSS:9.1:Critical) は、バージョン 0.8.30 以下のすべてのリリースに影響する。この問題に対する修正は、バージョン 0.8.31 で実施されている。

この脆弱性は、SandboxJS の保護メカニズムにおける弱点の悪用を許すものである。このライブラリは、“isGlobal” フラグを用いて、サンドボックス化されたコードがホストシステムのオブジェクトを改変できないように制御している。

しかし、Map.prototype や Set.prototype のようなグローバル・プロトタイプ参照を配列に格納し、その後に取得すると、valueOrProp() を経由する過程で isGlobal の保護フラグが剥離される。この “prototype pollution” と呼ばれるプロセスを悪用する攻撃者は、JavaScript のコア・オブジェクトを恒久的に改変できる。

サンドボックス化コード: const m = [Map.prototype][0]
配列作成: valueOrProp() 経由で isGlobal 保護フラグが除去
プロトタイプ改変: m.cmd = 'id' (ホスト・プロトタイプ汚染)
ホスト側影響: new Map().cmd === 'id' (永続化)
RCE (アプリケーション依存): ホストコードが execSync(obj.cmd) を呼び出す

たとえば、サンドボックス化されたコードは、Map プロトタイプに悪意ある cmd プロパティを注入できる。ただし、この変更は、ホスト・アプリケーション全体に伝搬/持続されてしまう。そのため、後続処理において、ホスト・コードがシステム・コマンド実行などの機微な操作に、この汚染されたプロパティを使用した場合に、攻撃者によるリモート・コード実行が達成されてしまう。

セキュリティ研究者 k14uz は、3 つの攻撃シナリオを示す、信頼性の高いエクスプロイト・コードを公開した。最も単純な概念実証 (PoC) では、サンドボックス化コードが Map プロトタイプに “polluted” プロパティを追加し、それがホストにより新規作成される全 Map オブジェクトに出現することが示されている。より危険な実証例では、組み込み関数の上書きや、”id” のようなシステム・コマンドの実行による、ユーザー情報の取得が示されている。

攻撃チェーンは以下の通りである。

ActionDescription
Create ArrayCreate an array containing a prototype reference.
Extract ReferenceExtract the prototype reference from the array, causing the protection flag to be lost.
Modify PrototypeAdd malicious properties or override existing ones on the prototype.
Trigger UsageWait for host code to access the modified properties in sensitive operations.

SandboxJS を用いて未信頼の JavaScript コードを実行している、すべてのアプリケーションが影響を受ける。攻撃者はサンドボックス隔離を破壊し、ホストの実行フローを操作する。さらに、ホスト・アプリケーションにおける汚染されたプロパティの処理方法に応じて、最終的にはシステム全体へのアクセス権が奪取される可能性がある。

公開されたアドバイザリによると、開発者は直ちにバージョン 0.8.31 へアップグレードする必要がある。この最新バージョンでは、配列操作を跨いでも保護フラグが維持され、組み込みプロトタイプへの書き込みがブロックされる。

追加の防御策として、セキュリティ・チームは未信頼コードの実行前に、組み込みプロトタイプをフリーズ (freeze) すべきである。また、ユーザーが制御するオブジェクト・プロパティを使用する可能性のある機微な処理について、アプリケーション監査を実施すべきである。

この脆弱性は、安全な JavaScript サンドボックス構築の難しさを浮き彫りにするものである。未信頼のコードを扱う際における、多層防御の重要性を改めて示している。