Skip to main content

Flowise EUVDEUVD-2026-52912

| CVE-2026-70478 CRITICAL
Information Exposure (CWE-200)
2026-08-04 https://github.com/FlowiseAI/Flowise GHSA-qgvm-j2hm-6m38
9.2
CVSS 4.0 · Vendor: https://github.com/FlowiseAI/Flowise
Share

Severity by source

Vendor (https://github.com/FlowiseAI/Flowise) PRIMARY
9.2 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
9.3 CRITICAL

Unauthenticated single network request (AV:N/AC:L/PR:N/UI:N) steals tokens for a separate service, so S:C with C:H; only minor token-state change written, so I:L and A:N.

3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N

Primary rating from Vendor (https://github.com/FlowiseAI/Flowise).

CVSS VectorVendor: https://github.com/FlowiseAI/Flowise

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

7
Patch available
Aug 04, 2026 - 21:01 EUVD
Analysis Updated
Aug 04, 2026 - 20:29 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Aug 04, 2026 - 20:22 vuln.today
cvss_changed
CVSS changed
Aug 04, 2026 - 20:22 NVD
9.2 (CRITICAL)
Source Code Evidence Fetched
Aug 04, 2026 - 20:15 vuln.today
Analysis Generated
Aug 04, 2026 - 20:15 vuln.today
CVE Published
Aug 04, 2026 - 19:37 cve.org
CRITICAL

DescriptionCVE.org

Summary

The OAuth2 token refresh endpoint (POST /api/v1/oauth2-credential/refresh/:credentialId) is in WHITELIST_URLS, meaning it requires no authentication. It decrypts the stored credential (containing clientId, clientSecret, refresh_token), sends a refresh request to the configured OAuth provider, and returns the new access_token directly in the response body.

Root Cause

typescript
// packages/server/src/routes/oauth2/index.ts:393-402
res.json({
    success: true,
    message: 'OAuth2 token refreshed successfully',
    credentialId: credential.id,
    tokenInfo: {
        ...tokenData,  // ← includes access_token!
        has_new_refresh_token: !!tokenData.refresh_token,
        expires_at: updatedCredentialData.expires_at
    }
})

Whitelist entry at packages/server/src/utils/constants.ts:40.

Attack Chain

  1. Attacker obtains a credential ID (via Finding 2 / public chatflow leak, or enumeration)
  2. Attacker calls POST /api/v1/oauth2-credential/refresh/:credentialId (no auth required)
  3. Server decrypts credential, sends refresh request to OAuth provider with user's client_secret
  4. Server returns the new access_token in the response to the attacker
  5. Attacker uses the token to access the victim's connected service (Google, Microsoft, etc.)

Docker Validation

POST /api/v1/oauth2-credential/refresh/fake-uuid returns {"message":"Credential not found"} (not 401 Unauthorized), proving the endpoint processes the request without authentication.

Impact

  • OAuth2 access token theft for any connected service
  • Full access to the victim's third-party accounts (Google, Microsoft, GitHub, etc.)
  • Client secret transmitted to OAuth provider during refresh
  • Can also be used for DoS by exhausting refresh token quota

Suggested Fix

Remove the refresh endpoint from WHITELIST_URLS and require authentication:

typescript
// Remove from WHITELIST_URLS in constants.ts
// Add authentication check in the route handler

---

Credits

  • Shinobi Security - https://github.com/shinobisecurity

AnalysisAI

Unauthenticated OAuth2 access-token theft in Flowise (npm/flowise <= 3.1.2) stems from the token-refresh endpoint POST /api/v1/oauth2-credential/refresh/:credentialId being listed in WHITELIST_URLS, so it bypasses authentication entirely. Any remote party who knows or guesses a credential ID can force the server to decrypt the stored OAuth2 credential, refresh it against the provider using the victim's client secret, and receive the fresh access_token directly in the response body. No public exploit code has been identified, but the researcher (Shinobi Security) validated the missing-auth behavior in Docker, and a vendor-released patch is available in 3.1.3.

Technical ContextAI

Flowise is a Node.js/TypeScript low-code platform for building LLM agents and chatflows; it stores third-party OAuth2 credentials (clientId, clientSecret, refresh_token) encrypted at rest so connected nodes can call services like Google, Microsoft, and GitHub. The refresh route in packages/server/src/routes/oauth2/index.ts is meant to renew expired tokens, but its path is registered in the WHITELIST_URLS array (packages/server/src/utils/constants.ts:40) that the authentication middleware skips. The root cause maps to CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor): the handler decrypts the credential and spreads the full tokenData - including access_token - into the JSON response (index.ts:393-402) with no caller authorization or ownership check, so secrets meant to stay server-side are handed to the requester.

RemediationAI

Vendor-released patch: 3.1.3 - upgrade Flowise to 3.1.3 or later, which removes the refresh endpoint from the unauthenticated whitelist per GHSA-qgvm-j2hm-6m38 (https://github.com/FlowiseAI/Flowise/security/advisories/GHSA-qgvm-j2hm-6m38). If you cannot upgrade immediately, apply the researcher's fix directly by removing the /api/v1/oauth2-credential/refresh/:credentialId entry from WHITELIST_URLS in packages/server/src/utils/constants.ts and adding an authentication/ownership check in the route handler, or block the /api/v1/oauth2-credential/refresh/ path at a reverse proxy or WAF so it is unreachable without a session - note this breaks legitimate token refresh for clients that rely on the endpoint and may force nodes to re-authenticate their OAuth2 connections. As additional interim controls, take the Flowise instance off the public internet (bind to localhost or restrict by IP/VPN), and rotate any OAuth2 credentials that may already have been exposed, since token theft leaves no obvious trace.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2026-66384 MEDIUM POC
5.3 Aug 12

Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2026-56274 HIGH POC
8.7 Jun 23

Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

CVE-2025-34221 CRITICAL POC
10.0 Sep 29

Vasion Print (formerly PrinterLogic) Virtual Appliance Host prior to version 25.2.169 and Application prior to version 2

Share

EUVD-2026-52912 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy