Langflow の auto-login スーパーユーザーバイパスと MCP 経由の RCE(CVE-2026-93680)
Langflow OSS 1.0.0〜1.12.8 は誰にでもスーパーユーザーセッションを渡し、MCP ツール経由で RCE に至ります。修正は 1.13.0 です。
要点
- Langflow OSS 1.0.0〜1.12.8 は自動ログインをデフォルトで有効にして出荷されており、未認証の
GET /api/v1/auto_login1回だけで完全なスーパーユーザーセッションが返ります。IBM はこの欠陥 CVE-2026-93680 を CVSS 9.8 Critical と評価しています。 - このセッションから、同じ未認証の攻撃者は Langflow の MCP エンドポイントに到達し、フロー作成・実行ツールを列挙し、サーバー上でカスタムコンポーネントのコードを実行します。CVE-2026-110186 で、これも 9.8 Critical です。関連する CVE-2026-110193 は、低権限アカウントが Agentic Assistant を通じて OS コマンド実行に到達できるものです。
- 2026年10月22日にリリースされた Langflow 1.13.0 は、自動ログインをデフォルトで無効にすることでこれらをすべて修正します。10月28日の IBM の速報は回避策を提示していません。修正済みバージョンは 1.13.0 のみです。
- これらの CVE の悪用は報告されておらず、2026年10月30日時点で CISA の悪用済み脆弱性カタログにも載っていません。前回の Langflow の認証欠損 CVE-2025-3248 は悪用され、ランサムウェアキャンペーンでの使用既知とともにカタログに掲載されています。露出したインスタンスは今すぐ更新してください。
影響を受けるか?
未認証の連鎖には以下がすべて必要です。
- PyPI、Docker、リリースアーカイブからインストールした Langflow OSS を、1.0.0〜1.12.8 のいずれかで実行している。
- そのインスタンスに、完全に信用していない者でも到達できる。インターネットに露出、共有内部ネットワーク上、コンテナネットワークから到達可能のいずれかです。
LANGFLOW_AUTO_LOGIN=falseを明示的に設定し、本物のスーパーユーザーを作成していない。影響リリースすべてのデフォルトは有効で、それが脆弱な構成です。
低権限の経路 CVE-2026-110193 は、ロールを問わず認証済みアカウント1つと、コンポーネントコードを生成する Agentic Assistant だけで成立します。CVE-2026-110192 は認証済みアカウントが必要で、運用者が注入した API キーを露出します。
| ブランチ | 影響バージョン | 修正バージョン |
|---|---|---|
| Langflow OSS 1.0.0〜1.12.8 | 1.0.0〜1.12.8 | 1.13.0 |
実行中のものを確認します。pip インストールの場合:
pip show langflow | head -2
よくある Docker デプロイでは、新しく pull したイメージではなく実行中のコンテナを確認します:
docker exec langflow python -c "import langflow; print(langflow.__version__)"
インスタンスで自動ログインが有効か確認します。自分が管理するマシンからリクエストします:
curl -s -o /dev/null -w "%{http_code}\n" http://your-langflow-host:7860/api/v1/auto_login
403 は自動ログインが無効で未認証の経路が閉じていることを意味します。200 はエンドポイントがたった今あなたのリクエストにスーパーユーザーセッションを渡したことで、それが脆弱性です。インスタンスは自分が管理しているので、確認に費用はかかりません。明示的な設定は環境変数に現れますが、未設定ならリリースのデフォルトが適用され、1.0.0〜1.12.8 では有効です:
docker exec langflow printenv | grep -i AUTO_LOGIN || echo "not set: the release default (on) applies"
修正方法
他の何ものにも届く前に、修正済みの唯一のバージョン 1.13.0 へ更新します。
- IBM の速報の指示どおり、データベース、シークレットキー、アップロードファイルをバックアップします。
- デプロイが自動ログインを使っている場合は、まず速報がリンクするインストール手順と Docker アップグレード手順に従い、既存アカウントをパスワードサインイン用に準備します。これを省くと更新後に締め出されます。1.13.0 は誰も自動的にサインインさせないからです。
- パッケージを更新します:
pip install --upgrade "langflow==1.13.0"
- Docker デプロイでは、修正済みイメージを pull し、永続データを保持したままコンテナを作り直します:
docker pull langflowai/langflow:1.13.0
IBM の速報はこれらの CVE に対する暫定的回避策を提示していません。更新を計画する間に露出を減らす手段は、ファイアウォールルールやネットワーク分離で、信用できないネットワークからインスタンスへの到達性を取り除くことです。これは未認証の連鎖を閉じますが、認証済みアカウントから機能する CVE-2026-110193 は閉じません。
根本原因は何か?
未認証エンドポイントが、デフォルトで有効なフラグを放置する限りスーパーユーザーセッションを配り続けていました。フラグとエンドポイントはコードの異なる層にあり、以前の修正は経路の一部しか閉じていませんでした。
設定はリリース構成の src/lfx/src/lfx/services/settings/auth.py(v1.12.8)にあり、影響リリースすべてがデフォルトで有効にします:
AUTO_LOGIN: bool = Field(
default=True, # TODO: Set to False in v2.0
description=(
"Enable automatic login with a configured or generated bootstrap account. "
"SECURITY WARNING: This bypasses authentication and should only be used in development environments. "
"Set to False in production. This will default to False in v2.0."
),
)
"""If True, the application will attempt to log in automatically as a super user."""
エンドポイントは src/backend/base/langflow/api/v1/login.py の GET /api/v1/auto_login です。フラグが有効だとスーパーユーザーを解決し、リクエストのどこにも認証情報を置かずにサイントークンを Cookie として返します:
@router.get("/auto_login", include_in_schema=False)
async def auto_login(request: Request, response: Response, db: DbSession):
auth_settings = get_settings_service().auth_settings
if auth_settings.AUTO_LOGIN:
auth = get_auth_service()
user_id, tokens = await auth.create_user_longterm_token(db)
...
response.set_cookie(
auth_cookie_name("access_token_lf", request),
tokens["access_token"],
...
背後の関数 create_user_longterm_token(src/backend/base/langflow/services/auth/service.py)は、設定されたスーパーユーザーか、データベースの最初のスーパーユーザーを探し、そのトークンを発行します。
この関数のコメントは以前の修正を GHSA-fjgc-vj2f-77hm として記録しています。それ以前はエンドポイントは365日有効なスーパーユーザーのベアラートークンを発行していました。修正後は短期のアクセストークンとリフレッシュトークンです。この是正はトークンの寿命を制限しましたが、匿名の呼び出し元にスーパーユーザーセッションを配り続けました。IBM の速報はこれを自動ログイン制御の不完全な是正と呼びます。
同じサービスの定数ファイルは API キー側からの隔たりも裏付けます。v1.5 以降 LANGFLOW_AUTO_LOGIN はキー認証の経路で有効な API キーを要求しますが、/auto_login ルートはセッションを出し続けました。警告文字列はフラグが有効なら /auto_login が認証情報なしでスーパーユーザーセッションを発行していると明言しています。
2つ目の欠陥 CVE-2026-110186 は、この連鎖のコード実行の半分です。Langflow の MCP エンドポイント /api/v1/agentic/mcp はフロー作成・実行ツールを公開し、フローにはカスタムコンポーネント、つまり Langflow がサーバー上で実行する Python コードを含められます。ルートは auto-login エンドポイントが満たすのと同じセッション機構で呼び出し元を認証します。そのため未認証の連鎖は、匿名リクエスト、スーパーユーザーセッション、MCP ツール、コンポーネントコード、サーバー側実行となります。
どのように悪用されるか?
2026年10月の CVE には公開された PoC がありません。以下の手順は、公開された exploit ではなく、IBM の速報、CVE の記述、v1.12.8 のソースから経路を再構築したものです。
- 攻撃者は、デフォルト構成のままの到達可能なインスタンスに
GET /api/v1/auto_loginを送ります。レスポンスはデフォルトスーパーユーザーのアクセストークン、リフレッシュトークン、API キーの Cookie を設定します。 - このセッションで、攻撃者は Streamable HTTP トランスポートで MCP エンドポイント
/api/v1/agentic/mcpに接続し、公開されたツールを列挙します。フロー作成、フロー実行、そして有効ならアシスタントです。 - 攻撃者はカスタムコンポーネント(Python コード)を含むフローを作成し、実行します。Langflow は Langflow プロセスとしてサーバー上でコンポーネントのコードを実行し、これは任意のコマンド実行です。
- 未認証アクセスが不可能なインスタンスでは、CVE-2026-110193 が低権限の変種を提供します。認証済みユーザーが Agentic Assistant にコンポーネントコードの生成や提出を求め、1.13.0 より前のアシスタントのコード走査がブロックしていなかったパターンを使って、OS コマンド実行に至ります。
1.13.0 のアシスタント向け修正群は、エイリアスやワイルドカード import を含む pydoc の import と NumPy の ctypeslib 属性をブロックします。これはブロックされていなかったパターンのうち2つを名指ししています。
攻撃の流れは?
一言でいうと、匿名リクエストが auto-login エンドポイントからスーパーユーザーセッションを集め、そのセッションが MCP ツールキットを駆動して、カスタムコンポーネントの Python がサーバー上で実行されるまで進みます。
/api/v1/auto_login"] --> B{"AUTO_LOGIN 有効?
(リリースのデフォルト)"} B -->|はい| C["スーパーユーザーセッションの
Cookie が返る"] B -->|いいえ| D["403: ここで
連鎖が遮断"] C --> E["MCP エンドポイント
/api/v1/agentic/mcp"] E --> F["フロー作成・実行
ツールを列挙"] F --> G["カスタムコンポーネントを
含むフローを作成"] G --> H["実行: コンポーネントの
Python がサーバー側で動く"]
攻撃者に何ができるか?
未認証の連鎖では、攻撃者は露出したインスタンスの Langflow スーパーユーザーとして操作します。
- カスタムコンポーネントを通じてサーバー上で任意のコードを、Langflow プロセスの権限で実行します。IBM の 2つの CVE 9.8 の CVSS ベクトルは、機密性・完全性・可用性すべてを高と評価しています。
- すべてのフローを読み取り、変更します。それとともに、フローコンポーネントに保存された認証情報と、モデルプロバイダーや API への接続も対象になります。
- スーパーユーザーの立場で、アカウントや API キーの作成を含め、製品が許す他のすべてを行います。
条件は、インスタンスが攻撃者から到達可能で、自動ログインが有効(1.12.8 までのリリースデフォルト)であることです。コード実行の段階に追加条件はありません。カスタムコンポーネントはスーパーユーザーが常に作れる通常の Langflow 機能だからです。
別個に、CVE-2026-110193 は低権限の認証済みアカウントに Agentic Assistant を通じた OS コマンド実行を与え、CVE-2026-110192 は認証済み攻撃者が保護不十分な認証情報を通じて機密情報を取得できます。IBM はこれらを 8.8 と 6.5 と評価しています。
なぜ修正は機能するか?
修正はリリースのデフォルトを変更して匿名セッションの源を取り除きます。v1.13.0 の src/lfx/src/lfx/services/settings/auth.py は次のとおりです:
AUTO_LOGIN: bool = Field(
- default=True, # TODO: Set to False in v2.0
+ default=False, # TODO: Set the development default to False in v2.0.
description=(
- "Set to False in production. This will default to False in v2.0."
+ "Enabled by default on development branches; official release packages and tags default to False. "
+ "Set LANGFLOW_AUTO_LOGIN=false to require authentication. "
),
)
この変更は 1.13.0 のリリース準備の一部としてマージされました。公式ホイール、リリースタグのソースアーカイブ、コンテナイメージは自動ログイン無効で出荷され、設定済みスーパーユーザーパスワードを要求します。フラグが無効なら /api/v1/auto_login は 403 を返し、キー認証の経路は v1.5 からすでにキーを要求していたため、本稿の未認証連鎖に入口はありません。同じリリースの関連修正が他の CVE の経路も閉じます。
- アシスタントのコード走査は
pydocとctypeslibの再エクスポートパターンをブロックします。 - agentic MCP のループバッククライアントはサーバープロセスから運用者注入の
LANGFLOW_API_KEYを継承せず、他のユーザーの身元でツールを実行しなくなりました。 - API キーの発行はすべての発行地点でデプロイのサインインポリシーを確認します。
修正は除去ではなく縮小です。自動ログイン機能は存在し続け、更新後に明示的に LANGFLOW_AUTO_LOGIN=true を設定した運用者は、自分のインスタンスで未認証セッションエンドポイントを再び開きます。
侵害されたか確認するには?
IBM はこれらの CVE の指標を公表しておらず、成功した乗っ取りは通常のスーパーユーザー利用の通常の痕跡を残すため、ログの確認が主な検査になります。
- アクセスログからそのエンドポイントへのリクエストを探します。影響インスタンスでは
GET /api/v1/auto_loginというパスで現れ、自分の確認リクエストも現れるため、送信元アドレスと時刻を比べてください。
grep "GET /api/v1/auto_login" /var/log/nginx/access.log | grep -v "127.0.0.1"
- インスタンスが露出し未修正だった期間に作成・変更されたフロー、特にチームメンバーのものと帰属できないカスタムコンポーネントを含むフローを見直します。
- 同時期に作成されたアカウント、API キー、クライアント登録をデータベースで確認します。
- 自動ログイン無効のインスタンスでの失敗した試みは、アクセスログの 403 レスポンスだけを残します。
1.13.0 より前のバージョンでデフォルト構成のままインターネットに露出していた場合は、ログが何を示すにせよ確認が当然と考えてください。乗っ取りの経路に必要なのはリクエスト1回だからです。
年表
- 2025-04-07: GitHub が CVE-2025-3248 のアドバイザリを公開。Langflow 1.3.0 より前の
/api/v1/validate/codeによる未認証コードインジェクションで、本稿の連鎖が反響する認証欠損です。 - 2025-05-05: CISA が CVE-2025-3248 を悪用済み脆弱性カタログに追加し、ランサムウェアキャンペーンでの使用既知を記録します。
- 2026-03-17: GitHub が CVE-2026-33017 を公開。公開フロービルドエンドポイントを経由する Langflow の未認証リモートコード実行で、1.9.0 で修正されました。
- 2026-09-29: Langflow リポジトリが、公式リリース成果物で
AUTO_LOGINをデフォルト false にするリリース準備の変更をマージします。 - 2026-10-22: Langflow 1.13.0 がリリースされ、デフォルト変更と関連修正を同梱します。
- 2026-10-28: IBM が Langflow OSS 1.0.0〜1.12.8 のセキュリティ速報を公開し、修正バージョン 1.13.0 と回避策なしを明記します。
- 2026-10-29: IBM が速報を更新して対応を明確化し、CVE-2026-93680、CVE-2026-110186、CVE-2026-110193、CVE-2026-110192 の CVE レコードが公開されます。
よくある質問
内部ネットワークに置いているだけなら安全ですか?
そのネットワーク上のすべてのピアを完全に信用するのでない限り、安全ではありません。IBM の CVSS ベクトルは攻撃元区分をネットワーク(AV:N)としており、攻撃者に必要なのは HTTP ポートへの経路だけで、インターネット露出ではありません。ポートに到達できる任意のコンテナ、ラップトップ、プロセスが、リクエスト1回でスーパーユーザーセッションを取得できます。
MCP エンドポイント自体は未認証ですか?
いいえ。/api/v1/agentic/mcp 配下のルートはセッショントークンか API キーで呼び出し元を認証します。未認証なのは、その要件を認証情報なしで満たす auto-login エンドポイントの部分です。だから修正は MCP トランスポートを変えるのではなく、匿名セッションの源を取り除きます。
誰かがこれらの欠陥を悪用しましたか?
2026年10月の CVE について悪用の報告はなく、2026年10月30日時点で CISA の悪用済み脆弱性カタログにも載っていません。2025年の前例 CVE-2025-3248 は実際に悪用され、カタログに掲載され、ランサムウェアキャンペーン使用既知のマーカーを持っています。この製品への露出を理論上でなく緊急に扱う歴史的な理由です。
同じ速報の Hono の脆弱性はどうですか?
速報は、Langflow が同梱する Web フレームワーク Hono の依存関係修正3件も組み込んでいます。いずれも Hono 4.13.5 で修正済みです。クエリフラグメントによるキャッシュポイズニング、オプションのドット記法ボディ解析でのサービス拒否、静的サイト生成でのパストラバーサルです。1.13.0 への更新に付属し、更新以外の個別対応は不要です。
1.13.0 に更新しましたが、完了ですか?
自動ログインを再度有効にしなければ完了です。更新はデフォルトを無効にし、セットアップ手順が本物のスーパーユーザーパスワードへと案内します。デプロイが以前の動作を維持するため LANGFLOW_AUTO_LOGIN=true を明示的に設定している場合、未認証セッションエンドポイントが復活し、フラグを再び無効にするまで露出し続けます。
なぜ以前の修正では閉じなかったのですか?
以前のは是正(GHSA-fjgc-vj2f-77hm として参照)は /api/v1/auto_login が発行するものを変えました。365日のスーパーユーザートークンが、短期のアクセストークンとリフレッシュトークンになりました。匿名の呼び出し元が受け取るトークンの寿命を制限しましたが、受け取ること自体が脆弱性であり、エンドポイントは 1.13.0 がデフォルトを変えるまでセッションを出し続けました。
Ostorlab で実行中の Langflow バージョンを見つける
Ostorlab の依存関係スキャンは、サービスやコンテナイメージがインストールする Python パッケージの完全なインベントリを構築します。Langflow 1.0.0〜1.12.8 を実行するすべてのデプロイを特定し、重要なすべての場所で 1.13.0 への更新を確認できます。Ostorlab でスキャンを実行して、露出期間が広がる前にバージョンを把握してください。
参考資料
- IBM セキュリティ速報「Security Bulletin: Langflow OSS is affected by multiple vulnerabilities」2026年10月28日公開、10月29日更新。影響範囲、4つの CVE、CVSS ベクトル、1.13.0 への対応、回避策なしの記述を含みます: https://www.ibm.com/support/pages/node/7294467 (2026年10月30日確認)
- CVE-2026-93680 レコード。IBM CNA のエントリで、2026年10月29日公開、CVSS v3.1 9.8、CWE-287: https://www.cve.org/cverecord?id=CVE-2026-93680 (2026年10月30日確認)
- CVE-2026-110186 レコード。2026年10月29日公開、CVSS v3.1 9.8、CWE-94: https://www.cve.org/cverecord?id=CVE-2026-110186 (2026年10月30日確認)
- CVE-2026-110193 レコード。2026年10月29日公開、CVSS v3.1 8.8、CWE-94: https://www.cve.org/cverecord?id=CVE-2026-110193 (2026年10月30日確認)
- Langflow 1.13.0 リリースノート。2026年10月22日公開。自動ログインのデフォルト変更と関連セキュリティ修正を記載: https://github.com/langflow-ai/langflow/releases/tag/v1.13.0 (2026年10月30日確認)
- リリース成果物で自動ログインをデフォルトで無効にするプルリクエスト。2026年9月29日マージ: https://github.com/langflow-ai/langflow/pull/14993 (2026年10月30日確認)
- Langflow v1.12.8 ソース。
src/lfx/src/lfx/services/settings/auth.pyのAUTO_LOGINデフォルト、src/backend/base/langflow/api/v1/login.pyの/auto_loginルート、src/backend/base/langflow/services/auth/service.pyのcreate_user_longterm_tokenと以前の修正のコメント。v1.12.8 タグで読んだものです: https://github.com/langflow-ai/langflow/tree/v1.12.8 (2026年10月30日確認) - Langflow v1.13.0 ソース。反転したデフォルトを示します: https://github.com/langflow-ai/langflow/blob/v1.13.0/src/lfx/src/lfx/services/settings/auth.py (2026年10月30日確認)
- agentic MCP ルートとその認証。v1.12.8 の
src/backend/base/langflow/api/v1/agentic_mcp.py: https://github.com/langflow-ai/langflow/blob/v1.12.8/src/backend/base/langflow/api/v1/agentic_mcp.py (2026年10月30日確認) - CVE-2025-3248 の GitHub アドバイザリ。Langflow の前回の認証欠損で、2025年4月7日公開、1.3.0 で修正: https://github.com/advisories/GHSA-c995-4fw3-j39m (2026年10月30日確認)
- CVE-2026-33017 の GitHub アドバイザリ。公開フロービルドエンドポイント経由の未認証 RCE で、2026年3月17日公開、1.9.0 で修正: https://github.com/advisories/GHSA-vwmf-pq79-vjvx (2026年10月30日確認)
- CISA 悪用済み脆弱性カタログ。CVE-2025-3248 は2025年5月5日にランサムウェアキャンペーン使用既知とともに追加され、2026年10月の Langflow CVE は2026年10月30日時点で掲載なし: https://www.cisa.gov/known-exploited-vulnerabilities-catalog (2026年10月30日確認)
- Langflow リポジトリ。2026年10月30日時点でスター数 156,160。プロジェクトの規模を示します: https://github.com/langflow-ai/langflow (2026年10月30日確認)
- Langflow の Docker Hub リポジトリ。2026年10月30日時点でプル数 4,482,343: https://hub.docker.com/r/langflowai/langflow (2026年10月30日確認)
- langflow の PyPI ダウンロード統計。2026年10月30日までの30日間で 37,742 ダウンロード: https://pypistats.org/packages/langflow (2026年10月30日確認)