Langflow: LangflowのSmart Transformにおけるプロンプトインジェクションにより、コード実行につながる可能性がある

## 概要

Langflowのバージョン1.3.0から1.10.2には、Smart Transform(`LambdaFilterComponent`)コンポーネントにコードインジェクションの脆弱性が存在します。

Smart Transformは、フロー作成者の指示と、入力データのプレビューを、LLM(大規模言語モデル)にPythonのラムダ関数を生成させるためのプロンプトに含めます。その後、モデルの応答から1行のラムダ関数を抽出し、構文形式のチェックのみを行い、Pythonのすべての組み込み関数を使用して評価し、結果の関数をLangflowのプロセス内で実行します。

悪意のあるフロー作成者は、この脆弱性を「指示」フィールドを通じて直接悪用できます。また、公開されているフローが攻撃者によって制御されたコンテンツをSmart Transformに渡す場合、攻撃者はプロンプトインジェクションを通じて間接的にこの脆弱性を悪用できる可能性があります。ただし、この場合、設定されたモデルがインジェクションされた指示に従う必要があります。

## 脆弱性の詳細

**脆弱なコードの場所**: `src/lfx/src/lfx/components/llm_operations/lambda_filter.py`(v1.10.2の242行目)

```python
def _validate_lambda(self, lambda_text: str) -> bool:
"""提供されたラムダ関数のテキストを検証します。"""
return lambda_text.strip().startswith("lambda") and ":" in lambda_text

# ...
return eval(lambda_text) # noqa: S307
```

例えば、攻撃者はモデルに以下のような内容を返させようと試みる可能性があります。

`lambda x: __import__("os").system("id")`

この式は、脆弱な形式チェックを満たします。`eval()`関数は、Pythonのデフォルトの組み込み関数にアクセスできる状態でラムダ関数を作成し、その後の`fn(data)`の呼び出し(`_execute_lambda`内)によって、コマンドが実行されます。

この脆弱性が悪用されると、Langflowのサービスプロセスと同じ権限でコードが実行されます。これにより、そのプロセスがアクセスできる認証情報、ファイル、アプリケーションデータ、ネットワークリソースが公開または変更される可能性があります。また、共有環境では、他のテナントに影響を与える可能性があります。

## 実証コード

https://github.com/user-attachments/assets/13c48fe1-7225-4e0d-9687-2d2df1e87f0e

## 修正方法

報告された脆弱性は、生成されたコードのASTを検証し、制限された組み込み関数マッピングを使用して評価することで対応されました。

修正は、プルリクエスト#13530(`1641b28f`)に実装され、Langflow 1.11.0でリリースされました。1.10.3へのバックポートは、プルリクエスト#14071(`94859df3`)に含まれています。ユーザーは、Langflow 1.10.3以降にアップグレードする必要があります。

## 対策

アップグレードが可能なまで:
- 実行可能なフローからSmart Transformを削除してください。
- フローの作成、編集、実行を信頼できるユーザーに制限してください。
- 信頼できない、または外部から制御されるデータをSmart Transformを経由させないでください。
- Langflowプロセスのファイルシステム、ネットワーク、および認証情報のアクセスを制限してください。

## 貢献者

- **Endor LabsのPeyton Kennedy ([p80n-sec](https://github.com/p80n-sec))** — 報告者(脆弱性の発見者)
- **[SZXSec](https://github.com/SZXSec)** — 報告者(重複報告)
- **[cyjhhh](https://github.com/cyjhhh)** — 報告者(重複報告)
- **[0gur1](https://github.com/0gur1)** — 報告者(重複報告)
- **[ajm4n](https://github.com/ajm4n)** — 報告者(重複報告、複数の脆弱性を含む報告の1つ)
- **[andifilhohub](https://github.com/andifilhohub)** — 分析担当
- **Jordan Frazier ([jordanrfrazier](https://github.com/jordanrfrazier))** — 修正担当開発者

影響を受けるパッケージ:
- pip (Python) langflow: 影響を受けるバージョンは1.3.0以上、1.10.3未満、1.10.3で修正済み。