GHSA-2x8m-83vc-6wv4: Flowise: SSRF bypass exposes internal services

GHSA-2x8m-83vc-6wv4 HIGH
Published April 16, 2026
CISO Take

Flowise's HTTP security wrappers (secureAxiosRequest and secureFetch) contain two SSRF bypass flaws: the default configuration allows all requests — including to localhost — when HTTP_DENY_LIST is unset, and a DNS rebinding TOCTOU attack can bypass IP validation by serving a safe IP during the check and an internal IP during the actual connection. For organizations running Flowise in cloud environments (AWS, GCP, Azure), this is acutely dangerous because any low-privileged user with workflow access can reach the cloud metadata service at 169.254.169.254, extracting IAM credentials and enabling lateral movement across the entire cloud account. This package has 37 cumulative CVEs, signaling a systemic security deficit in this codebase. Upgrade to flowise >= 3.1.0 immediately and explicitly set HTTP_DENY_LIST to include all RFC 1918 ranges and cloud metadata CIDRs — do not rely on the default.

Sources: GitHub Advisory ATLAS NVD

What is the risk?

HIGH. The first flaw (default insecure) is effectively AC:L despite the CVSS AC:H score, which only accounts for the DNS rebinding scenario — any user with Flowise workflow access can exploit the unset HTTP_DENY_LIST path with zero technical skill. The second flaw (DNS rebinding) requires infrastructure setup but is well-documented and tooling exists. In cloud deployments, successful exploitation routinely leads to IAM credential theft via metadata services, elevating real-world impact beyond the CVSS C:H/I:H score to full cloud account compromise. The 37 other CVEs in this package further indicate immature security practices and a higher likelihood of additional undiscovered vulnerabilities.

How does the attack unfold?

Initial Access
Attacker with low-privilege Flowise account (developer, contractor, or via compromised credential) accesses the workflow editor.
AML.T0049
SSRF Trigger
Attacker adds an HTTP Request node targeting http://169.254.169.254/latest/meta-data/iam/security-credentials/ — the unset HTTP_DENY_LIST causes secureAxiosRequest to skip all validation and execute the request.
AML.T0053
Credential Harvesting
Flowise host fetches cloud metadata service, returning IAM role name and temporary access keys with the permissions bound to the instance profile.
AML.T0083
Impact
Attacker uses harvested IAM credentials to access S3 buckets, RDS instances, or escalate privileges within the cloud account, achieving lateral movement beyond the AI platform.
AML.T0085.001

What systems are affected?

Package Ecosystem Vulnerable Range Patched
Flowise npm <= 3.0.13 3.1.0
Flowise npm <= 3.0.13 3.1.0

How severe is it?

CVSS 3.1
7.1 / 10
EPSS
N/A
Exploitation Status
No known exploitation
Sophistication
Trivial

What is the attack surface?

AV AC PR UI S C I A
AV Network
AC High
PR Low
UI None
S Unchanged
C High
I High
A Low

What should I do?

6 steps
  1. Patch: Upgrade flowise-components and flowise to >= 3.1.0 immediately.

  2. Explicit deny list: Set HTTP_DENY_LIST environment variable to block at minimum: 127.0.0.1, 0.0.0.0, 169.254.0.0/16 (cloud metadata), 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Do not assume a default-safe configuration exists in any version.

  3. Network controls: Deploy Flowise behind an egress firewall restricting outbound HTTP to known-good external endpoints only — defense in depth against TOCTOU bypass.

  4. IMDSv2 enforcement: If running on AWS, enforce IMDSv2 (hop limit=1) on EC2 instances to block metadata service access from application-level SSRF.

  5. Detection: Alert on outbound HTTP requests from Flowise processes to RFC 1918 addresses or 169.254.x.x; monitor DNS queries with TTL=0 from Flowise hosts as a DNS rebinding indicator.

  6. Audit: Review existing workflow nodes for HTTP Request steps pointing to internal addresses.

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

EU AI Act
Article 15 - Accuracy, robustness and cybersecurity
ISO 42001
A.6.2.3 - Protection of AI system interfaces
NIST AI RMF
MANAGE-2.4 - Residual risks are managed
OWASP LLM Top 10
LLM07 - Insecure Plugin Design

Frequently Asked Questions

What is GHSA-2x8m-83vc-6wv4?

Flowise's HTTP security wrappers (secureAxiosRequest and secureFetch) contain two SSRF bypass flaws: the default configuration allows all requests — including to localhost — when HTTP_DENY_LIST is unset, and a DNS rebinding TOCTOU attack can bypass IP validation by serving a safe IP during the check and an internal IP during the actual connection. For organizations running Flowise in cloud environments (AWS, GCP, Azure), this is acutely dangerous because any low-privileged user with workflow access can reach the cloud metadata service at 169.254.169.254, extracting IAM credentials and enabling lateral movement across the entire cloud account. This package has 37 cumulative CVEs, signaling a systemic security deficit in this codebase. Upgrade to flowise >= 3.1.0 immediately and explicitly set HTTP_DENY_LIST to include all RFC 1918 ranges and cloud metadata CIDRs — do not rely on the default.

Is GHSA-2x8m-83vc-6wv4 actively exploited?

No confirmed active exploitation of GHSA-2x8m-83vc-6wv4 has been reported, but organizations should still patch proactively.

How to fix GHSA-2x8m-83vc-6wv4?

1. Patch: Upgrade flowise-components and flowise to >= 3.1.0 immediately. 2. Explicit deny list: Set HTTP_DENY_LIST environment variable to block at minimum: 127.0.0.1, 0.0.0.0, 169.254.0.0/16 (cloud metadata), 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Do not assume a default-safe configuration exists in any version. 3. Network controls: Deploy Flowise behind an egress firewall restricting outbound HTTP to known-good external endpoints only — defense in depth against TOCTOU bypass. 4. IMDSv2 enforcement: If running on AWS, enforce IMDSv2 (hop limit=1) on EC2 instances to block metadata service access from application-level SSRF. 5. Detection: Alert on outbound HTTP requests from Flowise processes to RFC 1918 addresses or 169.254.x.x; monitor DNS queries with TTL=0 from Flowise hosts as a DNS rebinding indicator. 6. Audit: Review existing workflow nodes for HTTP Request steps pointing to internal addresses.

What systems are affected by GHSA-2x8m-83vc-6wv4?

This vulnerability affects the following AI/ML architecture patterns: agent frameworks, AI workflow automation, no-code LLM builders, RAG pipelines with web loaders.

What is the CVSS score for GHSA-2x8m-83vc-6wv4?

GHSA-2x8m-83vc-6wv4 has a CVSS v3.1 base score of 7.1 (HIGH).

What is the AI security impact?

Affected AI Architectures

agent frameworksAI workflow automationno-code LLM buildersRAG pipelines with web loaders

MITRE ATLAS Techniques

AML.T0008.002 Domains
AML.T0049 Exploit Public-Facing Application
AML.T0053 AI Agent Tool Invocation
AML.T0083 Credentials from AI Agent Configuration
AML.T0085.001 AI Agent Tools

Compliance Controls Affected

EU AI Act: Article 15
ISO 42001: A.6.2.3
NIST AI RMF: MANAGE-2.4
OWASP LLM Top 10: LLM07

What are the technical details?

Original Advisory

### Summary The core security wrappers (secureAxiosRequest and secureFetch) intended to prevent Server-Side Request Forgery (SSRF) contain multiple logic flaws. These flaws allow attackers to bypass the allow/deny lists via DNS Rebinding (Time-of-Check Time-of-Use) or by exploiting the default configuration which fails to enforce any deny list. ### Details The flaws exist in packages/components/src/httpSecurity.ts. Default Insecure: If process.env.HTTP_DENY_LIST is undefined, checkDenyList returns immediately, allowing all requests (including localhost). DNS Rebinding (TOCTOU): The function performs a DNS lookup (dns.lookup) to validate the IP, and then the HTTP client performs a new lookup to connect. An attacker can serve a valid IP first, then switch to an internal IP (e.g., 127.0.0.1) for the second lookup. ### PoC nsure HTTP_DENY_LIST is unset (default behavior). Use any node utilizing secureFetch to access http://127.0.0.1. Result: Request succeeds. Scenario 2: DNS Rebinding Attacker controls domain attacker.com and a custom DNS server. Configure DNS to return 1.1.1.1 (Safe IP) with TTL=0 for the first query. Configure DNS to return 127.0.0.1 (Blocked IP) for subsequent queries. Flowise validates attacker.com -> 1.1.1.1 (Allowed). Flowise fetches attacker.com -> 127.0.0.1 (Bypass). Run the following for manual verification "// PoC for httpSecurity.ts Bypasses import * as dns from 'dns/promises'; // Mocking the checkDenyList logic from Flowise async function checkDenyList(url: string) { const deniedIPs = ['127.0.0.1', '0.0.0.0']; // Simplified deny list logic if (!process.env.HTTP_DENY_LIST) { console.log("⚠️ HTTP_DENY_LIST not set. Returning allowed."); return; // Vulnerability 1: Default Insecure } const { hostname } = new URL(url); const { address } = await dns.lookup(hostname); if (deniedIPs.includes(address)) { throw new Error(`IP ${address} is denied`); } console.log(`✅ IP ${address} allowed check.`); } async function runPoC() { console.log("--- Test 1: Default Configuration (Unset HTTP_DENY_LIST) ---"); // Ensure env var is unset delete process.env.HTTP_DENY_LIST; try { await checkDenyList('http://127.0.0.1'); console.log("[PASS] Default config allowed localhost access."); } catch (e) { console.log("[FAIL] Blocked:", e.message); } console.log("\n--- Test 2: 'private' Keyword Bypass (Logic Flaw) ---"); process.env.HTTP_DENY_LIST = 'private'; // User expects this to block localhost try { await checkDenyList('http://127.0.0.1'); // In real Flowise code, 'private' is not expanded to IPs, so it only blocks the string "private" console.log("[PASS] 'private' keyword failed to block localhost (Mock simulation)."); } catch (e) { console.log("[FAIL] Blocked:", e.message); } } runPoC();" ### Impact Confidentiality: High (Access to internal services if protection is bypassed). Integrity: Low/Medium (If internal services allow state changes via GET). Availability: Low.

Exploitation Scenario

An attacker with low-privilege access to a shared Flowise instance — a developer, contractor, or compromised account — creates a simple HTTP Request node targeting http://169.254.169.254/latest/meta-data/iam/security-credentials/. Since HTTP_DENY_LIST is unset in the default installation, secureAxiosRequest performs no IP validation and the request succeeds immediately, returning the instance profile name. A follow-up request to the role endpoint yields temporary AWS access keys with whatever permissions the Flowise host's IAM role holds. In a more targeted DNS rebinding scenario, the attacker points a workflow node at a controlled domain (attacker.com) with TTL=0 DNS records — returning 1.1.1.1 during Flowise's dns.lookup validation check and then 127.0.0.1 for the actual HTTP client connection — bypassing even a properly configured deny list.

Weaknesses (CWE)

CWE-367 — Time-of-check Time-of-use (TOCTOU) Race Condition: The product checks the state of a resource before using that resource, but the resource's state can change between the check and the use in a way that invalidates the results of the check.

  • [Implementation] The most basic advice for TOCTOU vulnerabilities is to not perform a check before the use. This does not resolve the underlying issue of the execution of a function on a resource whose state and identity cannot be assured, but it does help to limit the false sense of security given by the check.
  • [Implementation] When the file being altered is owned by the current user and group, set the effective gid and uid to that of the current user and group when executing this statement.

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:L

Timeline

Published
April 16, 2026
Last Modified
April 16, 2026
First Seen
April 17, 2026

Related Vulnerabilities