PraisonAI: f-stringの補間によるコードインジェクションの脆弱性(Deploy APIサーバー生成)
### 概要
`deploy/api.py`モジュールは、`agents_file`パラメータを直接f-stringに埋め込み、その結果をファイルに書き込み、`subprocess.Popen()`で実行します。攻撃者が`agents_file`の値(CLI引数、設定ファイル、または上位API経由)を制御できる場合、任意のPythonコードを注入できます。
### 詳細
`src/praisonai/praisonai/deploy/api.py` (80行目):
```python
code = f'''...
praisonai = PraisonAI(agent_file="{agents_file}")
...
"agent_file": "{agents_file}"
...'''
```
生成されたコードは、その後実行されます(190行目):
```python
subprocess.Popen(['python', server_file])
```
`agents_file`は、一切サニタイズまたは検証されていません。悪意のある値が文字列のコンテキストから抜け出し、以下のようなコードが生成されます。
```python
agents_file = '"); import os; os.system("id"); #'
# 生成されるコード:
# praisonai = PraisonAI(agent_file=""); import os; os.system("id"); #")
```
同様のパターンは、Dockerfileの生成を行う`deploy/docker.py`(33行目)にも存在します。
### 実証コード
```python
# インジェクションの例:
agents_file = '"); import os; os.system("id"); #'
# 生成されるコードの例:
template = f'praisonai = PraisonAI(agent_file="{agents_file}")'
print(template)
# 出力: praisonai = PraisonAI(agent_file=""); import os; os.system("id"); #")
```
### 影響
- デプロイコマンドを実行しているマシン上で、**任意のコードが実行される**可能性があります。
- `agents_file`が設定ファイルまたはCI/CDパイプラインから取得される場合、**サプライチェーンのリスク**が生じる可能性があります。
影響を受けるパッケージ:
- pip (Python) PraisonAI: 影響を受けるバージョンは4.6.77以下、4.6.78で修正済み。