JavaScript 式式サンドボックスエスケープとパッチ進化をデモするための最小限の実験環境です。
複数バージョンのサンドボックスを通じて、以下を実現します:
完全にエスケープ可能 → this をパッチ → さらに destructuring をパッチ
同時に新しいバイパス方法も残し、現実世界における脆弱性とパッチの攻防を理解するのに役立ちます。
.
├── payload.js # 各種攻撃ペイロード
├── sandbox_v0.js # 元の脆弱なバージョン
├── sandbox_v1.js # this チェーンを修正
├── sandbox_v2.js # destructuring も修正
私たちは次のような現実をシミュレートしたいと考えています:
この繰り返しです。
このプロジェクトは、本当に安全な VM を作るためのものではありません。 むしろ、次のことを観察するためのものです:
それぞれの「一見もっともらしい」パッチが、どのように次のテクニックで打ち破られるのか。
npm install vm2 acorn acorn-walk
node sandbox_vX.js
X を 0 / 1 / 2 に置き換えてください。
payload.js には4種類のアクセス方法が組み込まれています:
| 名称 | 技術 |
|---|---|
| CVE-2025-68613 / this | this 経由で process を取得 |
| CVE-2026-25049 / destructuring | オブジェクト分割で constructor を取得 |
| Reflect.get | Reflect API を使用 |
| Dynamic Reflect | 動的プロパティアクセス |
特徴:
結果: すべてのペイロードが通過可能。
攻撃者はお祭り騒ぎです。
変更点:
"use strict" を強制.call(undefined)その結果:
this === undefined
攻撃者はうなずき、別の道を進み続けます。
追加されたもの:
ObjectPattern の専用チェックconstructorブラックリスト方式のパッチは通常、次の特徴を持ちます:
✔ 明確な経路を修正できる ✔ コストが低い ✔ 導入が容易
しかし同時に:
❌ 防御範囲が限定的 ❌ 意味的に等価な他のアクセス方法で簡単にバイパスされる
これこそが、vm2 のようなサンドボックスが歴史的にエスケープを繰り返してきた理由です。