CVE-2026-33017
CVE-2026-33017
概要
Langflow CVE-2026-33017(CVSS 9.3)— 同じexec()呼び出しで2度ハック
言及日
脆弱性情報(NVD)
- 深刻度: 緊急(CVSS 9.8)
- CVSSベクター:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - CWE: CWE-94, CWE-95, CWE-306
- EPSS: 98.41%(上位 0.1%)
影響を受けるバージョン:
- Langflow Langflow: < 1.8.2
概要(日本語): CVE: CVE-2026-33017
説明: Langflowは、AIを活用したエージェントやワークフローを構築およびデプロイするためのツールです。1.9.0より前のバージョンでは、POST /api/v1/build_public_tmp/{flow_id}/flow エンドポイントが認証を必要とせずにパ
原文: Langflow is a tool for building and deploying AI-powered agents and workflows. In versions prior to 1.9.0, the POST /api/v1/build_public_tmp/{flow_id}/flow endpoint allows building public flows without requiring authentication. When the optional data parameter is supplied, the endpoint uses attacker-controlled flow data (containing arbitrary Python code in node definitions) instead of the stored flow data from the database. This code is passed to exec() with zero sandboxing, resulting in unauthenticated remote code execution. This is distinct from CVE-2025-3248, which fixed /api/v1/validate/code by adding authentication. The build_public_tmp endpoint is designed to be unauthenticated (for public flows) but incorrectly accepts attacker-supplied flow data containing arbitrary executable code. This issue has been fixed in version 1.9.0.
VulnCheck KEV
- 製品: Langflow Langflow
- CISA KEV 掲載: ✅ あり
- ランサムウェア悪用: Unknown
PoC / Exploit
- initial-access: GitHub(MaxMnMl/langflow-CVE-2026-33017-poc) / VulnCheck XDB
- initial-access: GitHub(omer-efe-curkus/CVE-2026-33017-Langflow-RCE-PoC) / VulnCheck XDB
- initial-access: GitHub(SimoesCTT/Sovereign-Echo-33017) / VulnCheck XDB
- initial-access: GitHub(rootdirective-sec/CVE-2026-33017-Lab) / VulnCheck XDB
- initial-access: GitHub(z4yd3/CVE-2026-33017-PoC) / VulnCheck XDB
- initial-access: GitHub(EQSTLab/CVE-2026-33017) / VulnCheck XDB
- initial-access: GitHub(masterwok/CVE-2026-33017-Langflow-PoC) / VulnCheck XDB
- initial-access: GitHub(Jorrit-VM/CVE-2026-33017) / VulnCheck XDB
- initial-access: GitHub(r3nsi15/CVE-2026-33017-langflow-rce) / VulnCheck XDB
悪用事例
参考リンク
- github.com
Patch - github.com
ExploitMitigationVendor Advisory - github.com
Third Party Advisory - medium.com
ExploitThird Party Advisory - github.com
Release Notes - www.cisa.gov
US Government Resource - www.sysdig.com
Press/Media Coverage
技術詳細
脆弱性の概要
本脆弱性は、LangflowのPOST /api/v1/build_public_tmp/{flow_id}/flowエンドポイントに認証が欠落しており(CWE-306)、かつリクエストのdataパラメータで渡された攻撃者のフローデータ(ノード定義に任意のPythonコードを含む)がサンドボックスなしのexec()に直接渡されることで、認証前のリモートコード実行(RCE)が可能となるものです(CWE-94, CWE-95)。
根本原因
dataパラメータが指定された場合、エンドポイントはデータベース上の保存済みフロー情報の代わりに攻撃者制御のフローデータを使用します。このフローデータ内のノード定義(Pythonコードを含むフィールド)が、安全な評価機構を一切経由せずにexec()へ渡される設計上の欠陥に起因します。加えて、当該エンドポイントは認証チェックを行わずに公開されており、外部からの直接的な攻撃を許容していました。
攻撃シナリオ
- 攻撃者は有効な
flow_idを推測または列挙します(公開フローIDの推測、あるいはタイミング攻撃等)。 - 攻撃者は
POST /api/v1/build_public_tmp/{flow_id}/flowに対して、Content-Type: application/jsonで、dataキーを含むJSONペイロードを送信します。このdata内に、ノード定義の一部として任意のPythonコード(例:OSコマンドを実行するコード)を埋め込みます。 - サーバがリクエストを受信し、
data内のノード定義を解析、含まれるコード片をexec()で実行します。サンドボックス機構が存在しないため、任意のシステムコマンドがサーバ権限で実行され、リモートコード実行が成立します。
検出方法
ブラックボックステスト
以下のcurlコマンドを用いて、対象サーバにRCEが発生するか検証できます。
curl -X POST "https://target.example.com/api/v1/build_public_tmp/test-flow-id/flow" \
-H "Content-Type: application/json" \
-d '{
"data": {
"nodes": [
{
"id": "node-1",
"data": {
"template": {
"code": "__import__(\"os\").system(\"id > /tmp/pwned.txt\")"
}
}
}
]
}
}'
確認ポイント:
- HTTPレスポンスステータスが200または正常系であること(認証エラーが返らないこと)。
- サーバ上でコマンドが実行された痕跡(例:
/tmp/pwned.txtの生成)を確認する。DNSやHTTPのアウトオブバンド検証も有効。 - 別のフローIDで同様に試行し、認証不要でアクセス可能であることを確認する。
ホワイトボックステスト
- ソースコード内のルーティング定義を検索し、当該エンドポイントのデコレータに認証要求(例:
@login_required)が付与されていないことを確認する。grep -r "build_public_tmp" ./src/ - エンドポイント内で
dataパラメータが処理され、データベースの値より優先されてノード構築に使われる分岐を特定する。grep -rn "exec(" ./src/backend/ exec()に渡される引数が、攻撃者入力に由来するノード定義のコード片を含んでいることを確認する。特に、サンドボックス化処理(ast.literal_evalや制限付きグローバル等)が一切行われていないことをコードパスから検証する。
対策
恒久的対策
Langflow 1.9.0以降にアップグレードすることで修正が適用されます。当該バージョンでは、エンドポイントに適切な認証が追加され、かつexec()への信頼できないコードの受け渡しが防止されています。
アップグレードコマンド例:
pip install --upgrade langflow==1.9.0
Dockerを利用している場合は、イメージタグを1.9.0以降に変更し再デプロイしてください。
暫定対策
即時のバージョンアップが困難な場合、以下の軽減策を実施します。
- リバースプロキシ(Nginx等)またはネットワークACLにより、
/api/v1/build_public_tmp/エンドポイントへの外部からのアクセスを遮断する。 - WAFで当該パスへのPOSTリクエストに対し、ボディ内に
dataパラメータが含まれ、かつ__import__やos.system等の危険な文字列を検知した場合にブロックするルールを設定する。 - アプリケーション設定で公開フロー構築機能を無効化できる場合は、それを無効にする。
- 必要に応じて、認証レイヤーを前段に追加し、全てのリクエストに有効なトークンを要求する。