
CVE-2026-67620 - SSRF en Flowise mediante una lista de denegación incompleta de metadatos de nube (Oracle OCI 192.0.0.192 + Alibaba 100.100.100.200 eluden la DEFAULT_DENY_LIST)
Producto: FlowiseAI/Flowise — constructor visual de LLM / agentes de IA (~54k ★)
Versiones afectadas: ≤ 3.1.4 — se confirma que sigue siendo vulnerable en 3.1.4, la última versión (reverificado el 2026-08-06)
Vulnerabilidad: Server-Side Request Forgery mediante una lista de denegación incompleta
CWE: CWE-918 (SSRF) · CWE-184 (Lista incompleta de entradas no permitidas)
Gravedad: Media — CVSS 3.1 6.5 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N)
Descubierta: 2026-07-10 · Notificada a VulnCheck (CVD): 2026-07-15
Investigador: Bobur Abdugafforov (Mahadsec)
Estado del proveedor — no se emitirá ningún parche. El proyecto Flowise ha sido oficialmente descontinuado y ya no acepta informes de vulnerabilidades de seguridad. Este aviso se publica para que los operadores que aún ejecutan Flowise puedan mitigar el problema por sí mismos.
Flowise incluye una protección SSRF que bloquea las solicitudes a los servicios de metadatos de instancias en la nube. La
lista de denegación cubre el rango link-local 169.254.0.0/16 utilizado por AWS, GCP, Azure y
DigitalOcean — pero omite dos direcciones de metadatos que no están en ese rango:
| Nube | IP de metadatos | ¿En la lista de denegación? |
|---|---|---|
| AWS / GCP / Azure / DigitalOcean | 169.254.169.254 | ✅ bloqueada |
| Oracle Cloud (OCI) | 192.0.0.192 | ❌ no bloqueada |
| Alibaba Cloud | 100.100.100.200 | ❌ no bloqueada |
El DEFAULT_DENY_LIST completo incluido en la imagen Docker oficial flowiseai/flowise:3.1.4
(.../flowise-components/dist/src/httpSecurity.js) es:
'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 entradas. Ni 192.0.0.192 ni 100.100.100.200 aparecen, y ninguna cae
dentro de ningún CIDR listado — nótese que 192.168.0.0/16 no cubre 192.0.0.192, y
no hay ninguna entrada 100.64.0.0/10 (CGNAT) en absoluto.
La lista es idéntica byte a byte entre 3.1.2 y 3.1.4. El único cambio en
httpSecurity.ts a lo largo de esas versiones es la normalización de IPv6 mapeadas a IPv4 dentro de
isDeniedIP(), lo cual no puede afectar a dos direcciones IPv4 simples.
Ninguna de las direcciones omitidas cae dentro de un CIDR privado o link-local convencional:
192.0.0.192 está dentro del bloque de Asignaciones de Protocolo de la IETF 192.0.0.0/24 y parece
enrutable globalmente, mientras que 100.100.100.200 se sitúa en el rango CGNAT 100.64.0.0/10, que
la lista de denegación tampoco cubre. Por lo tanto, una protección construida enumerando "la IP de metadatos" y el
rango link-local pasa por alto ambas.
Un usuario autenticado puede forzar al servidor de Flowise a emitir peticiones GET arbitrarias a estas direcciones. En un despliegue en OCI o Alibaba Cloud esto alcanza el servicio de metadatos de la instancia, que sirve la identidad de la instancia y material de credenciales.
packages/components/src/httpSecurity.ts — DEFAULT_DENY_LIST
(compilado: httpSecurity.js:31-50)
La lista contiene 169.254.169.254 y el rango 169.254.0.0/16, pero no
contiene 192.0.0.192, 100.100.100.200, ni el rango CGNAT 100.64.0.0/10.
Flujo de la petición: GET /api/v1/fetch-links → checkDenyList(url) → secureFetch() vía
webCrawl. secureFetch revalida correctamente los destinos de redirección, por lo que las omisiones basadas en redirecciones
están cubiertas — el defecto está en el contenido de la lista, lo que significa que una redirección
a cualquiera de las IP omitidas pasa la validación igual que una petición directa.
La ruta fetch-links no lleva middleware checkPermission, por lo que cualquier sesión
autenticada llega a ella independientemente del rol.
GET /api/v1/fetch-links?url=<target>&relativeLinksMethod=webCrawl&limit=1
Cada nodo que enruta a través de secureFetch / secureAxiosRequest con una URL proporcionada por el usuario
se ve afectado por la misma lista de denegación — por ejemplo, los nodos web-scraper y HTTP-request.
Nota sobre la alcanzabilidad: el problema es además alcanzable sin autenticación a través del
endpoint público POST /api/v1/prediction/:id siempre que un nodo de obtención de URL esté presente
en un chatflow que haya sido hecho público.
Confirmado dinámicamente contra una instancia local activa de Flowise 3.1.2, con listeners vinculados a
192.0.0.192:80 y 100.100.100.200:80.
Control — la IP de metadatos de AWS/GCP/Azure está correctamente bloqueada:
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.
Bypass 1 — Metadatos de 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"]}
Bypass 2 — Metadatos de Alibaba Cloud:
GET /api/v1/fetch-links?url=http://100.100.100.200/&relativeLinksMethod=webCrawl&limit=1
HTTP/1.1 200
Solicitudes del lado del servidor observadas en los listeners (lo que demuestra que la obtención se originó desde el servidor de Flowise, no desde el cliente):
# 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 -
Se incluye un script PoC como poc.py.
Cualquier usuario autenticado de Flowise —y, cuando un nodo de obtención de URL se encuentra en un chatflow público, cualquier visitante no autenticado— puede hacer que el servidor emita solicitudes GET a los servicios de metadatos de instancia de Oracle Cloud y Alibaba Cloud, lo cual el producto intenta explícitamente impedir para otros proveedores.
En una implementación afectada, esto expone datos de identidad de la instancia y los endpoints de metadatos que sirven credenciales de rol de instancia, a partir de los cuales se deriva un acceso adicional a la cuenta de nube de la víctima. De forma más amplia, la misma laguna permite solicitudes hacia el rango CGNAT 100.64.0.0/10, que es enrutable dentro de muchas redes de proveedores.
La severidad refleja que la explotación requiere que la instancia de Flowise esté alojada en OCI o Alibaba Cloud. El defecto en sí —una lista de denegación incompleta— es independiente del proveedor.
No se emitirá ningún parche del proveedor; el proyecto está descontinuado. Los operadores deberían: