Jul 17, 2026·6 min read·78 visits
Flowise enterprise passport middleware silently falls back to hardcoded default JWT signing secrets and identifiers when configuration environment variables are left unset, enabling remote unauthenticated attackers to forge arbitrary tokens and take over administrator accounts.
CVE-2026-56271 represents a critical security flaw in Flowise, an open-source visual orchestration platform for Large Language Models (LLMs) and autonomous AI agents. The vulnerability occurs within the platform's enterprise passport authentication module, where default cryptographic parameters are used in the absence of explicit environment variables. Specifically, the middleware silently falls back to known, static hardcoded secrets ('auth_token' and 'refresh_token') and identifiers ('AUDIENCE' and 'ISSUER') to generate and verify session tokens. Consequently, remote unauthenticated attackers can construct arbitrary JSON Web Tokens (JWTs) signed with these hardcoded credentials to gain administrative entry to the application.
Flowise is a visual builder for developing applications utilizing Large Language Models (LLMs) and AI agents. It features an enterprise authentication subsystem implemented via Passport.js middleware to manage secure sessions and restrict API access to authenticated users.
The vulnerability, designated as CVE-2026-56271, resides in the server module's configuration parsing logic. When enterprise authentication is enabled, the platform relies on JSON Web Tokens (JWTs) to authenticate requests. However, the system contains fallback logic that automatically defaults to static, hardcoded cryptographic values if the administrator has not configured custom secrets.
This behavior violates fundamental cryptographic principles by exposing critical trust assets. The vulnerability is classified under CWE-321 (Use of Hard-coded Cryptographic Key) and CWE-327 (Use of a Broken or Risky Cryptographic Algorithm). Unauthenticated attackers can exploit this logic remotely to gain unauthorized access to the application.
The root cause of this vulnerability lies within the initialization sequence of the enterprise passport middleware, located at packages/server/src/enterprise/middleware/passport/index.ts. To authenticate API requests, the server relies on the verification of JWTs supplied in HTTP headers.
During initialization, the application attempts to read several critical configuration parameters from the environment. These include JWT_AUTH_TOKEN_SECRET, JWT_REFRESH_TOKEN_SECRET, JWT_AUDIENCE, and JWT_ISSUER. If these parameters are missing, instead of halting initialization or raising a fatal configuration exception, the middleware proceeds using hardcoded fallbacks.
The default values utilized by the application are 'auth_token' for the authentication token secret, 'refresh_token' for the refresh token secret, 'AUDIENCE' for the expected token audience, and 'ISSUER' for the expected token issuer. Because these strings are publicly available in the open-source repository, any instance of Flowise deployed without these environment variables relies on the exact same static key material to verify session signatures.
The core flaw can be observed in the variable assignment logic where environment configuration is evaluated. If the left-hand operand of the logical OR operator is undefined, the program evaluates the right-hand operand, which contains the static string literal.
// VULNERABLE COMPONENT
// packages/server/src/enterprise/middleware/passport/index.ts
const authSecret = process.env.JWT_AUTH_TOKEN_SECRET || 'auth_token';
const refreshSecret = process.env.JWT_REFRESH_TOKEN_SECRET || 'refresh_token';
const audience = process.env.JWT_AUDIENCE || 'AUDIENCE';
const issuer = process.env.JWT_ISSUER || 'ISSUER';To remediate this structural flaw, the application must completely eliminate hardcoded secrets from its execution paths. In secure designs, the application either throws a fatal error during bootstrap when required configurations are absent, or dynamically generates unique, high-entropy secrets in memory during startup.
// PATCHED COMPONENT
// Utilizing crypto package to prevent predictable fallback keys
import crypto from 'crypto';
// Generate a high-entropy, ephemeral secret if environment configuration is absent
const dynamicAuthSecret = process.env.JWT_AUTH_TOKEN_SECRET || crypto.randomBytes(32).toString('hex');
const dynamicRefreshSecret = process.env.JWT_REFRESH_TOKEN_SECRET || crypto.randomBytes(32).toString('hex');
// Enforce configuration validation for claims parameters
const audience = process.env.JWT_AUDIENCE;
const issuer = process.env.JWT_ISSUER;
if (!audience || !issuer) {
throw new Error('Initialization failure: JWT_AUDIENCE and JWT_ISSUER must be explicitly declared');
}By implementing dynamic fallback values, any session tokens forged using the static default values will fail validation because the server-side validation key is now unique to the runtime instance and completely unpredictable.
Exploitation of CVE-2026-56271 requires no specialized privileges, user interaction, or advanced cryptographic analysis. The attack complexity is low. An attacker must first confirm that the target instance is running a vulnerable version of Flowise and has not had its default JWT configuration altered.
The attacker then constructs a malicious JWT. The token header is configured with standard hashing algorithms such as HMAC SHA-256 (HS256). The payload is crafted with claims identifying the user as an administrator, accompanied by the standard 'AUDIENCE' and 'ISSUER' claims. Finally, the attacker signs the serialized header and payload using the hardcoded cryptographic key 'auth_token':
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "admin-user-id-or-email",
"role": "admin",
"aud": "AUDIENCE",
"iss": "ISSUER",
"exp": 1924905600
}Once the forged token is generated, the attacker attaches it to the Authorization header of an HTTP request directed at a protected API endpoint (e.g., Authorization: Bearer <forged_token>). The server receives the request, attempts validation using the static secret, and admits the request because the signature matches.
The security impact of successful exploitation is complete administrative compromise of the affected Flowise instance. Because Flowise acts as an orchestrator for Large Language Models and AI agents, it holds sensitive system integration configurations, including API keys for model providers (e.g., OpenAI, Anthropic, Cohere), database connection strings, and vector database credentials.
By bypassing authentication, an attacker gains full access to these secrets. They can modify existing AI pipelines, inject malicious prompts (prompt injection attacks), redirect data streams, or read private chat transcripts stored in the system. If the Flowise instance is configured to execute shell tools or custom Python scripts, an administrative compromise can easily lead to Remote Code Execution (RCE) on the host machine.
The vulnerability is rated as Critical with an NVD CVSS v3.1 score of 9.8. This score reflects the combination of zero-privilege remote access, low exploitation complexity, and extreme impact across confidentiality, integrity, and availability metrics.
The primary remediation path is upgrading the Flowise deployment to version 3.1.0 or later. This version contains changes to how authentication tokens are validated, preventing fallback to known static keys. Developers must ensure that all dependencies, including flowise, flowise-ui, and flowise-components, are updated simultaneously.
If immediate upgrading is unfeasible, administrators must enforce configuration hardening by manually defining high-entropy keys within the environment variables. The configuration requires setting JWT_AUTH_TOKEN_SECRET and JWT_REFRESH_TOKEN_SECRET to randomized strings of at least 32 characters, alongside specific, unique values for JWT_AUDIENCE and JWT_ISSUER.
Deployers must also audit existing configurations. If the application was previously run with default values, any existing sessions must be invalidated immediately. Changing the secrets will automatically expire all active sessions, forcing users to authenticate against the newly defined security parameters.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
flowise FlowiseAI | <= 3.0.13 | 3.1.0 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-321 / CWE-327 |
| Attack Vector | Network |
| CVSS v3.1 Score | 9.8 (Critical) |
| CVSS v4.0 Score | 9.3 (Critical) |
| EPSS Score | 0.00376 (29.82 percentile) |
| Exploit Status | none |
| CISA KEV Status | Not Listed |
The software uses a hard-coded cryptographic key, which can allow an attacker to bypass authentication, decrypt sensitive data, or perform other cryptographic operations.
CVE-2026-12411 is a broken access control vulnerability in the DevLXD interface of Canonical LXD versions 6.6 through 6.8. The flaw resides in the devLXDInstancePatchHandler component, which fails to verify storage volume ownership when an instance attaches a new disk device via the /dev/lxd guest socket. When the security.devlxd.management.volumes configuration option is enabled, an untrusted guest or DevLXD identity can issue a crafted HTTP PATCH request referencing another tenant's custom storage volume. The LXD host daemon subsequently mounts the target volume into the requesting guest, permitting unauthorized cross-tenant read and write operations.
CVE-2026-105769 (GHSA-5q7h-w9jf-cx97, GO-2026-6225) is an origin validation error and credential exfiltration vulnerability affecting Kaniko prior to version 1.25.20. The flaw stems from an unanchored regular expression in the integrated Azure Container Registry (ACR) credential helper (github.com/chrismellard/docker-credential-acr-env). When Kaniko processes a Dockerfile containing an image reference hosted on a lookalike domain containing an ACR suffix as a substring (e.g., x.azurecr.io.attacker.com), the credential helper acquires a Microsoft Entra ID access token for Azure Resource Manager and transmits it via HTTP POST to the attacker-controlled host.
CVE-2026-62300 is an uncontrolled resource consumption vulnerability (CWE-400) affecting the daemon mode of filecoin-pin in versions up to and including 1.1.0. The daemon implements the IPFS Pinning Service API to store content on Filecoin's Proof of Data Possession (PDP) service. Due to the absence of rate limits, concurrency caps, execution timeouts, and Directed Acyclic Graph (DAG) traversal limits, an authenticated user—or an unauthenticated user when authentication is disabled—can exhaust system resources via crafted POST /pins requests.
CVE-2026-61536 is a high-severity Remote Code Execution (RCE) vulnerability in the masci/banks Python library prior to version 2.4.3. The flaw exists within the CompletionExtension component, which parses JSON-serialized Tool definitions directly from rendered Jinja template bodies inside {% completion %} blocks. When handling tool calls returned by an LLM, the library dynamically resolves the target callable using importlib.import_module() and getattr() based on an unvalidated import_path string. An attacker who can supply or modify prompt templates can inject a malicious Tool JSON object pointing to arbitrary Python functions (such as os.system), bypassing the Jinja SandboxedEnvironment introduced in version 2.4.2 and achieving arbitrary code execution when the LLM invokes the tool.
Payload CMS contains a missing authorization vulnerability (CWE-862) in its client-side upload instructions endpoint and the `@payloadcms/storage-vercel-blob` storage adapter. Two distinct logic defects allow authenticated users lacking collection-level `create` or `update` permissions to generate signed upload tokens and upload arbitrary files directly to external cloud storage.
CVE-2026-55098 (GHSA-93cm-2v4m-c56c) is an authorization bypass and sensitive information disclosure vulnerability in Basekick-Labs Arc prior to version 26.06.2. The flaw stems from an incomplete remediation of CVE-2026-47735, which failed to restrict the full suite of DuckDB table-valued filesystem I/O functions and quoted-identifier invocations. Because Arc's query parser ignores function calls during table reference extraction, authenticated users with minimal or empty permissions can invoke functions like parquet_scan(), glob(), and read_blob() to read, enumerate, and extract telemetry data across all tenant databases residing within the shared local storage root.