Aug 4, 2026·6 min read·3 visits
Flowise fails to redact decrypted credentials whose fields are defined as 'string' instead of 'password' in the schema, exposing database passwords and GCP private keys over the API.
An incomplete credential redaction mechanism in Flowise allows authenticated users with standard view permissions to retrieve sensitive decrypted third-party credentials in plaintext.
Flowise is an open-source visual tool for building and orchestrating large language model applications. To integrate with third-party APIs, databases, and cloud services, Flowise manages credentials via its backend service layer. Users save database connection strings, API keys, and service account files within dedicated configurations, which the application encrypts before writing them to the database.
The vulnerability lies in the API endpoint responsible for retrieving these saved credentials. Specifically, the GET /api/v1/credentials/:id endpoint retrieves, decrypts, and exposes raw secrets in its HTTP response body under certain conditions. The exposure stems from a selective redaction mechanism that only flags and sanitizes variables explicitly categorized under the 'password' data type.
This architecture creates a broad attack surface. Any authenticated user possessing low-privilege access, such as viewer permissions (credentials:view), can call the affected API endpoint directly. If the target credential contains fields configured as standard strings rather than passwords, the backend transmits the sensitive secrets in plaintext, resulting in unauthorized information disclosure.
The root cause of this exposure is an incomplete sanitization routine within the credential redaction function. In the Flowise backend, when a user requests a credential by ID, the application invokes decryptCredentialData() to recover the plaintext values from database storage. Once decrypted, the backend attaches these secrets to the plainDataObj attribute within the API response object.
To prevent exposing these secrets to the client browser, the application pipes the response object through a sanitization helper named redactCredentialWithPasswordType(). This function iterates through each credential field defined in the component's metadata schema. However, the function relies on a strict filtering constraint, checking only for fields where the parameter type equals 'password'.
If a credential component developer defines a secret-carrying field using the 'string' type, the sanitizer bypasses it entirely. The helper function fails to match the field against its hardcoded sanitization rule and returns the variable unmodified. Consequently, the backend returns the database connection strings, RSA private keys, and master access tokens in plaintext within the JSON response payload.
The vulnerability is localized within the credential retrieval services and utility modules. In packages/server/src/utils/index.ts, the validation routine only matches input parameters with the explicit type designation of 'password'. Below is the vulnerable logic path:
// Vulnerable utility logic in packages/server/src/utils/index.ts
export const redactCredentialWithPasswordType = (
componentCredentialName: string,
decryptedCredentialObj: ICredentialDataDecrypted,
componentCredentials: IComponentCredentials
): ICredentialDataDecrypted => {
const plainDataObj = cloneDeep(decryptedCredentialObj)
for (const cred in plainDataObj) {
const inputParam = componentCredentials[componentCredentialName].inputs?.find(
(inp) => inp.type === 'password' && inp.name === cred // Only redacts if type is 'password'
)
if (inputParam) {
plainDataObj[cred] = REDACTED_CREDENTIAL_VALUE
}
}
return plainDataObj
}This logic fails when processing component configurations that use standard string declarations for sensitive values. For instance, the PostgreSQL credential component (postgresUrl) defines its connection string as follows:
{
"label": "PostgreSQL Connection URL",
"name": "postgresUrl",
"type": "string",
"placeholder": "postgresql://dbuser:password@localhost:5432/dbname"
}Because the type is 'string', the find condition in the sanitization loop evaluates to undefined. The field is not sanitized, and the raw connection string, including the embedded database username and password, is written directly to the API response.
Exploitation of this vulnerability requires network access to the Flowise API and a valid user session token. An authenticated attacker starts by identifying credential records associated with database nodes or cloud service integrations. Since the system exposes unique identifiers for credential objects, the attacker can retrieve specific credential records directly.
The attacker issues a standard HTTP GET request to the /api/v1/credentials/:id endpoint, appending the targeting credential identifier. No special tools or exploit payloads are required. A simple request tool or command-line client like curl can perform the operation:
curl -X GET "http://localhost:3000/api/v1/credentials/<credential_uuid>" \
-H "x-request-from: internal" \
-H "Cookie: token=<jwt_token>"If the targeted credential is a PostgreSQL connection string, a MongoDB URL, or a Google Cloud Service Account JSON file, the response payload will contain the raw credentials inside the plainDataObj attribute. The client interface typically filters or hides these values, but direct API interaction bypasses the UI constraints entirely.
The impact of this credential exposure is significant. Attackers who extract connection strings can directly access internal database servers (such as MongoDB, PostgreSQL, and Redis databases). This access permits arbitrary data exfiltration, database structure modification, and complete loss of confidentiality and integrity of application data stored in those repositories.
Furthermore, the exposure of Google Cloud Service Account JSON structures exposes RSA private keys. Attackers can utilize these keys to authenticate directly to GCP services, potentially accessing Google Vertex AI models, cloud storage buckets, or Kubernetes clusters. This exposure can lead to lateral movement within the victim's broader enterprise cloud infrastructure.
From a privilege escalation perspective, any user with basic workspace viewing rights can extract administrative credentials. In multi-tenant or shared Flowise environments, this allows low-privileged operators to elevate their actual operational capabilities to match those of the organization's cloud administrators, fully compromising the trust boundary.
To address this vulnerability, administrators must upgrade their Flowise deployments to version 3.1.3 or higher. The fixed release updates the input configurations and ensures that sensitive fields are categorized properly, preventing exposure through the API responses. The patch release can be accessed from the official repository at https://github.com/FlowiseAI/Flowise/releases/tag/flowise@3.1.3.
If immediate software upgrades are not feasible, organizations must restrict network access to the Flowise administrative interface using network access control lists or firewalls. Implement strict network segmentation to ensure the application server cannot reach sensitive destination networks unless explicitly required. Additionally, administrators should audit user accounts and limit access to trusted personnel.
For custom self-hosted codebases, developers should manually override the sanitization logic. Replace the reliance on 'password' types with a more robust property matching mechanism, or audit all credentials schemas in packages/components/credentials/ to verify that sensitive attributes explicitly use secure types. The application should avoid returning raw values inside plainDataObj to client-side endpoints whenever possible.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
Flowise FlowiseAI | <= 3.1.2 | 3.1.3 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-200 |
| Attack Vector | Network |
| CVSS Score | 6.5 |
| EPSS Score | N/A |
| Impact | Information Exposure |
| Exploit Status | PoC |
| KEV Status | Not Listed |
The product exposes sensitive information to an actor who is not explicitly authorized to have access to that information.
A critical authorization flaw exists in Flowise, a popular drag-and-drop orchestrator for building customized Large Language Model flows. Prior to version 3.1.3, multiple OAuth2 credential endpoints do not filter database lookups by the requesting entity's workspace context. This omission, combined with the exclusion of several endpoints from the global authentication pipeline, permits unauthenticated remote actors to access, manipulate, or steal access tokens linked to external service integrations.
CVE-2026-69262 is a high-severity incorrect authorization vulnerability (CWE-863) within the Flowise drag-and-drop LLM flow platform. Prior to version 3.1.3, Flowise did not enforce resource-type validation on its deletion endpoint. Although routing middleware ensured users held deletion privileges for either chatflows or agentflows, the service level lacked validation checks to verify whether the target resource matched the user's specific permissions. Consequently, an authenticated user with only agentflow deletion permissions could delete arbitrary chatflow configurations, leading to unauthorized state modification and service disruption.
CVE-2026-69258 is a high-severity property injection and unauthenticated authorization bypass vulnerability in Flowise, a drag-and-drop orchestration interface for building customized LLM workflows. In affected versions prior to 3.1.3, the unauthenticated prediction API endpoint (`POST /api/v1/prediction/:id`) processed client-controlled parameters inside an `overrideConfig` payload without authorization checks. The backend unconditionally spread this object into internal context structures, enabling unauthenticated remote attackers to overwrite critical session values, pollute execution contexts, and bypass flow restrictions.
CVE-2026-69252 represents a missing authorization check (CWE-862) in the files API route (`/api/v1/files`) of Flowise, a drag-and-drop user interface for building LLM flows. Prior to version 3.1.3, an authenticated API key or user could list, access, and delete files across arbitrary workspaces inside an organization, completely bypassing workspace logical boundaries.
A comprehensive technical analysis of CVE-2026-45584, a high-severity heap-based buffer overflow in Microsoft Defender's QEX parsing logic. The vulnerability resides within mpengine.dll and allows unauthenticated remote code execution or denial of service when processing crafted archives designed to trigger threat remediation and QEX history logging.
A medium-severity vulnerability in Undici's retry interceptor causes body-length mismatches with the Content-Length header during HTTP 206 response resumption. Forwarding these inconsistent headers downstream leads to HTTP response desynchronization, connection hangs, or potential protocol smuggling.