SandboxJS Escape の脆弱性は CVE-2026-43898 が FIX:ホスト上での任意のコード実行と PoC

Critical SandboxJS Escape Vulnerability Enables Host Takeover

2026/05/13 CyberSecurityNews — npm 上で広く利用されている JavaScript サンドボックス・ライブラリ SandboxJS において、深刻なセキュリティ欠陥が発見された。この脆弱性 CVE-2026-43898 (CVSS 10.0) を悪用する攻撃者は、サンドボックスを完全に突破し、ホストシステム上での任意のコード実行を可能にする。

この脆弱性が影響を及ぼす範囲は、@nyariv/sandboxjs パッケージのバージョン 0.9.5 以下である。根本的な原因は、サンドボックス内で定義された関数が、LispType.Call という内部コールバックを漏洩していた点にある。

このコールバックを取得した攻撃者は、サンドボックス外へアクセスし、ホスト環境全体の完全な制御を可能にする。

この問題を発見した GitHub のセキュリティ研究者が、GHSA-g8f2-4f4f-5jqw としてアドバイザリを公開した。この脆弱性は Macabely により報告され、実環境での攻撃の成立を示す PoC も提供された。

この脆弱性の影響は極めて深刻である。未認証の攻撃者が引き起こす、ユーザー操作が不要なアクションにより、ホスト上での完全なリモートコード実行が達成される。そのため、このライブラリを用いて、信頼されていない JavaScript を実行する全てのアプリケーションが、完全侵害のリスクに晒される。

すでに、修正済みバージョン 0.9.6 が npm 上で公開されているため、影響を受けるユーザーは即時アップデートが必要である。バージョン 0.9.5 以下を使用し続ける場合には、この攻撃に対して無防備な状態を継続する。

サンドボックスエスケープの仕組み

この脆弱性は、”prop.ts” 内における addOps 関数のプロパティ・アクセス処理に存在する。サンドボックス内コードが、関数の caller/callee/arguments プロパティへアクセスするという点に問題がある。

CommonJS ビルドでは、以下のようなコードにより、内部コールバックが取得可能である。

  • function f(){ return f.caller }

この結果、関数を呼び出したホスト側のコールバックが返却される。このコールバックは LispType.Call であり、ランタイム内部の関数呼び出し処理を担うものである。このハンドラが、params オブジェクトを検証せずに使用する点に問題があり、攻撃者による params フィールドの完全な制御が可能になってしまう。

この欠陥を突く攻撃者は、偽装入力を構築し、本来は許可されていない処理を実行させることが可能となる。さらに、複数のコールを連鎖させることで、ホスト側の Function コンストラクタを取得できる。このコンストラクタに任意の JavaScript コードを渡し、ホスト上での直接実行を可能にする。

公開された PoC では、Node.js の child_process モジュールを使用し、システム・コマンドを実行する例が示されている。

リモートコード実行とリスク

CVSS スコア 10.0 が示す通り、この脆弱性は極めて危険である。ネットワーク経由で攻撃が可能であり、低難易度/特権不要/ユーザー操作不要という条件が重なっている。さらに、CVSS のスコープは Changed とされるため、サンドボックスからホスト環境への境界突破が発生する。

ユーザー入力やサードパーティ・スクリプトを SandboxJS を用いて処理する、すべてのプラットフォームが攻撃の対象となる。具体的には、オンライン・コードエディタ/サーバサイド・スクリプト処理系/自動化プラットフォームなどが含まれる。

サンドボックスが突破された場合には、機密性/完全性/可用性のすべてが侵害される。

バージョン 0.9.6 における修正では、caller/callee/arguments プロパティへのアクセスを遮断することで、根本から原因が解消されている。

即時アップデートが困難な場合には、修正が適用されるまで、このライブラリを介して信頼されていない JavaScript を実行すべきではない。