我们的 AI 引擎 Neutron 在加州大学伯克利分校的 CyberGym 基准测试中取得了 97.1% 的成绩。 了解更多

深度解析

深度解析

Langflow 自动登录超级用户绕过与经 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_login 就会返回完整的超级用户会话。IBM 将该漏洞 CVE-2026-93680 评为 9.8 Critical。
  • 利用该会话,同一个未认证攻击者可以访问 Langflow 的 MCP 端点,枚举其流程编写与执行工具,并在服务器上执行自定义组件代码:CVE-2026-110186,同为 9.8 Critical。相关漏洞 CVE-2026-110193 允许低权限账户通过 Agentic Assistant 达到操作系统命令执行。
  • 2026 年 10 月 22 日发布的 Langflow 1.13.0 通过默认关闭自动登录修复了全部问题;IBM 10 月 28 日的公告未提供任何变通方案。唯一修复版本是 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 只需要实例上一个任意角色的已认证账户,加上生成组件代码的 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 部署,检查正在运行的容器而不是刚拉取的镜像:

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。

  1. 按 IBM 公告的要求,备份数据库、密钥和已上传的文件。
  2. 如果部署使用自动登录,先按公告链接的安装和 Docker 升级说明,把现有账户准备为密码登录。跳过这一步会在升级后把自己锁在外面,因为 1.13.0 不再自动登录任何人。
  3. 升级包:
pip install --upgrade "langflow==1.13.0"
  1. Docker 部署请拉取修复镜像并重建容器,保留持久数据:
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 正在无凭据发放超级用户会话。

第二个漏洞 CVE-2026-110186 是链条中代码执行的一半。Langflow 的 MCP 端点 /api/v1/agentic/mcp 公开流程编写与执行工具,而流程可以包含自定义组件,即 Langflow 在服务器上运行的 Python 代码。这些路由用自动登录端点所能满足的同一会话机制认证调用者,因此未认证链条是:匿名请求、超级用户会话、MCP 工具、组件代码、服务器端执行。

如何被利用?

2026 年 10 月的这些 CVE 没有公开的概念验证。以下步骤是根据 IBM 公告、CVE 描述和 v1.12.8 源码重构的路径,而非来自已公开的漏洞利用。

  1. 攻击者向仍保持默认配置的可达实例发送 GET /api/v1/auto_login。响应会设置默认超级用户的访问令牌、刷新令牌和 API 密钥 Cookie。
  2. 持该会话,攻击者通过 Streamable HTTP 传输连接 MCP 端点 /api/v1/agentic/mcp,枚举公开的工具:流程编写、流程执行,以及在启用时的助手。
  3. 攻击者编写一个包含自定义组件(即 Python 代码)的流程并执行。Langflow 以 Langflow 进程身份在服务器上运行组件代码,这就是任意命令执行。
  4. 在无法未认证访问的实例上,CVE-2026-110193 提供低权限变体:已认证用户让 Agentic Assistant 生成或提交组件代码,使用 1.13.0 之前助手代码扫描未阻断的模式,达到操作系统命令执行。

1.13.0 针对助手的修复集阻断 pydoc 导入和 NumPy 的 ctypeslib 属性(包括别名和通配导入),点明了其中两种未被阻断的模式。

攻击如何流动?

一句话:匿名请求从自动登录端点收集超级用户会话,该会话驱动 MCP 工具包,直到自定义组件的 Python 在服务器上运行。

flowchart LR A["匿名 GET
/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 对两个 9.8 CVE 的 CVSS 向量将机密性、完整性和可用性都评为高。
  • 读取和修改每个流程,以及其中存储的凭据、流程组件和与模型提供商、API 的连接。
  • 利用超级用户地位做产品允许的其他一切,包括创建账户和 API 密钥。

条件是:实例对攻击者可达,且自动登录开启(1.12.8 及之前的发布默认值)。代码执行步骤无需更多条件,因为自定义组件是超级用户随时可以创建的 Langflow 正常功能。

另外,CVE-2026-110193 让低权限已认证账户通过 Agentic Assistant 达到操作系统命令执行,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 发布准备的一部分合并,因此官方 wheel、发布标签源码归档和容器镜像都以自动登录关闭的状态发布,并要求配置超级用户密码。开关关闭时 /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 之前的版本上以默认配置暴露在互联网上,无论日志显示什么都应视为需要一次复查,因为接管路径只需一次请求。

时间线

  • 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 记录发布。

Langflow 未认证访问漏洞时间线(2025 年 4 月至 2026 年 10 月):CVE-2025-3248、CVE-2026-33017,以及在 1.13.0 修复的四个 CVE。
图 1:继 CVE-2025-3248(被利用、与勒索软件相关)和 CVE-2026-33017 之后,Langflow 在 18 个月内的第三次未认证访问或 RCE 披露。来源:GitHub 公告、CISA KEV 目录与 IBM 公告,2026 年 10 月 30 日查证。

常见问题

实例只在内网就安全吗?

除非内网上每个节点都完全可信,否则不安全。IBM 的 CVSS 向量将攻击向量评为网络(AV:N):攻击者只需要一条到 HTTP 端口的路径,不需要暴露在互联网。任何能到达该端口的容器、笔记本或进程都可以用一次请求拿到超级用户会话。

MCP 端点本身是未认证的吗?

不是。/api/v1/agentic/mcp 下的路由用会话令牌或 API 密钥认证调用者。链条中未认证的部分是自动登录端点,它在无凭据的情况下满足这一要求。这就是修复移除匿名会话来源而不是修改 MCP 传输的原因。

有没有人利用过这些漏洞?

2026 年 10 月的 CVE 没有利用报告,截至 2026 年 10 月 30 日也不在 CISA 已利用漏洞目录中。2025 年的前身 CVE-2025-3248 曾在野被利用、已列入目录并带有已知勒索软件活动使用的标记,这是把对该产品的暴露当作紧急而非理论问题处理的历史理由。

同一公告里的 Hono 漏洞怎么办?

该公告还并入 Langflow 捆绑的 Web 框架 Hono 的三个依赖修复,全部在 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 日更新,含受影响范围、四个 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 日查证)