Miggo Logo

GHSA-hr92-4q35-4j3m: FlowiseAI/Flowise has Server-Side Request Forgery (SSRF) vulnerability

7.5

CVSS Score
3.1

Basic Information

CVE ID
-
EPSS Score
-
Published
9/15/2025
Updated
9/15/2025
KEV Status
No
Technology
TechnologyJavaScript

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Package NameEcosystemVulnerable VersionsFirst Patched Version
flowisenpm= 3.0.53.0.6

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability analysis identified a Server-Side Request Forgery (SSRF) issue in the /api/v1/fetch-links endpoint of the Flowise application. The root cause was the lack of URL validation when the server-side fetch API was used to retrieve content from user-provided URLs.

The investigation started by analyzing the provided vulnerability details, which pointed to specific code paths in the FlowiseAI/Flowise repository. By comparing the last vulnerable version (3.0.5) with the first patched version (3.0.6), I identified the fixing commit e002e617df6177cb603c8c569d224bce5fb96b33.

The commit's patch introduced two new security functions, secureFetch and checkDenyList, and applied them to the vulnerable code paths.

The analysis of the patch revealed three key functions involved in the vulnerability:

  1. xmlScrape (packages/components/src/utils.ts): This function's direct use of fetch(currentURL) was replaced with secureFetch(currentURL), confirming it as a sink for the SSRF.
  2. webCrawl (packages/components/src/utils.ts): This function, and the crawl helper it calls, also used an unrestricted fetch. The patch added a checkDenyList validation at the start of webCrawl and replaced fetch with secureFetch within the crawl function, indicating it was a primary vulnerable path.
  3. getAllLinks (packages/server/src/services/fetch-links/index.ts): This service-layer function acts as the entry point for the vulnerable logic, taking the user's URL and dispatching it to either webCrawl or xmlScrape. The patch added a checkDenyList call here as a defense-in-depth measure.

These three functions would appear in a runtime profile or stack trace during an exploit. An attacker would send a request to the /api/v1/fetch-links endpoint, which would trigger the getAllLinks service, and subsequently either webCrawl or xmlScrape, causing the server to make a malicious request to an internal resource.

Vulnerable functions

webCrawl
packages/components/src/utils.ts
This function is responsible for crawling web pages. Before the patch, it did not validate the input URL, allowing an attacker to provide an internal or malicious URL. The function `crawl` called by `webCrawl` used the standard `fetch` API without restrictions, leading to a Server-Side Request Forgery (SSRF) vulnerability. The patch added the `checkDenyList` function to validate the URL before processing.
xmlScrape
packages/components/src/utils.ts
This function scrapes XML sitemaps from a given URL. It was vulnerable because it used the standard `fetch` API with the user-provided URL without any validation, making it susceptible to SSRF attacks. The patch replaced the insecure `fetch` call with a new `secureFetch` function that includes security checks.
getAllLinks
packages/server/src/services/fetch-links/index.ts
This service function orchestrates the link fetching process. It receives the raw URL from the controller and, prior to the patch, passed it to the vulnerable `webCrawl` or `xmlScrape` functions without validation. An attacker could exploit this to trigger the SSRF. The patch added a call to `checkDenyList` at the beginning of the function to validate the URL early in the process.

WAF Protection Rules

WAF Rule

### Summ*ry --- * S*rv*r-Si** R*qu*st *or**ry (SSR*) vuln*r**ility w*s *is*ov*r** in t** `/*pi/v*/**t**-links` *n*point o* t** *lowis* *ppli**tion. T*is vuln*r**ility *llows *n *tt**k*r to us* t** *lowis* s*rv*r *s * proxy to ****ss int*rn*l n*twork

Reasoning

T** vuln*r**ility *n*lysis i**nti*i** * S*rv*r-Si** R*qu*st *or**ry (SSR*) issu* in t** `/*pi/v*/**t**-links` *n*point o* t** *lowis* *ppli**tion. T** root **us* w*s t** l**k o* URL v*li**tion w**n t** s*rv*r-si** `**t**` *PI w*s us** to r*tri*v* *on