CVE-2026-56278
Executive Summary
CVE-2026-56278 is a critical session hijacking vulnerability affecting Flowise, a popular open-source visual platform for building LLM orchestration flows, in all versions up to and including 3.0.13. The vulnerability stems from a hardcoded default secret ('flowise') used by the express-session middleware when the EXPRESS_SESSION_SECRET environment variable is not configured, as exposed in packages/server/src/enterprise/middleware/passport/index.ts. Because this secret value is publicly visible in the source code, any unauthenticated remote attacker who can reach the Flowise web interface can forge valid signed session cookies to impersonate any user, effectively bypassing all authentication and authorization controls. Successful exploitation results in complete compromise of the application's confidentiality, integrity, and availability, with a CVSS base score of 9.3. Enterprise teams running Flowise in production must treat this as an urgent priority given the trivial nature of exploitation and the high privilege level obtained.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability resides in the session management implementation of the Flowise server-side application, specifically within the Passport middleware setup. Flowise uses express-session to maintain user session state across requests. The session middleware configuration performs a conditional assignment: it reads the EXPRESS_SESSION_SECRET environment variable if present; however, if the variable is absent or empty, it defaults to the literal string 'flowise' as the signing secret.
The express-session library signs the session ID (the connect.sid cookie value) using an HMAC algorithm with the configured secret. A signed cookie has the format s:<session-id>.<hmac-signature>. If an attacker knows the signing secret — and in this case, the default is embedded in publicly accessible source code on GitHub and NPM — they can forge arbitrary session cookies. Specifically, an attacker can:
- Obtain or predict a valid session ID of a target user. This can be done by knowing the session store's ID generation algorithm (typically a random string, but the attacker does not need to guess it if they can force a known session ID or if the session store uses predictable IDs). More practically, the attacker can create their own session by logging in as an unprivileged user, capturing the session ID, and then re-signing that same ID using the known secret while modifying the session payload (if session data is stored client-side) or by session fixation techniques.
- Compute the correct HMAC-SHA256 signature for the forged session ID using the known secret
'flowise'. - Present the forged cookie to the server. If the session store contains a matching session entry for that ID, the server will treat the attacker as the authenticated user associated with that session.
The most straightforward exploitation path does not even require modifying session payloads: if the attacker can enumerate or guess session IDs of active admin users, they can forge the signature and fully impersonate them. In many production deployments, session IDs are moderately random, but the absence of additional security layers (like IP binding) makes this feasible. Alternatively, an attacker could leverage session fixation: initiate a session anonymously, obtain a valid session ID, then trick a legitimate user into using that session ID (e.g., via XSS or by predicting the session store's behavior). Once the victim authenticates, the attacker uses the forged cookie for that session ID to hijack the authenticated session.
Attack surface: any network-reachable Flowise instance where EXPRESS_SESSION_SECRET is not explicitly configured. This includes default Docker deployments, snapshots, and cloud images that do not enforce environment variable configuration. The fix in Flowise 3.1.0 presumably adds validation to reject weak/default secrets or generates a random secret at startup if none is provided.
Exploitation Scenarios
Scenario 1: Direct Session Forgery (No Prior Interaction)
- The attacker identifies a public-facing Flowise instance (e.g., via Shodan
title:"Flowise"). - Using a known session ID
abc123(obtained by registering an account and capturing theconnect.sidcookie value). - The attacker computes the HMAC signature:
signature = HMAC_SHA256('flowise', 'abc123'). This signature is computed as a base64 URL-encoded value, producing a full cookies:abc123.<signature>. - The attacker sends an HTTP request to
/api/v1/useror similar admin endpoint with the forged cookie. - If the session ID
abc123corresponds to an active admin session, the attack succeeds. To increase success probability, the attacker can harvest multiple session IDs from public logs, error messages, or brute-force session IDs if the generation is low-entropy. - The attacker now has full administrative control: can create/delete flows, access API keys, exfiltrate LLM prompts and data, and pivot into backend systems.
Scenario 2: Session Fixation
- The attacker sends an unauthenticated request to Flowise to obtain a valid but unauthenticated session ID (e.g.,
fixed_sid_789). - The attacker crafts a URL or injects JavaScript (via any other vuln) that forces the victim's browser to issue a request with the fixed session ID (e.g.,
document.cookie = "connect.sid=s:fixed_sid_789.<forged_sig>; path=/"). - The victim logs in normally; authentication associates the session ID
fixed_sid_789with the admin account. - The attacker, who knows the session ID and the secret, re-forges the cookie signature (which may change if the session data payload changes) and uses it to access the victim's session.
Exploit Availability: Public PoC exists (described above), though no Metasploit or Nuclei template has been released. The exploit logic is simple enough that a competent SOC analyst can validate the vulnerability within minutes without automation.
Impact Assessment
The CVSS v3.1 vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — a base score of 9.3 (Critical). The component scores: Attack Vector Network (remote, no physical access); Attack Complexity Low (no special conditions); Privileges Required None; User Interaction None; Scope Unchanged. The vulnerability impacts confidentiality (High — full access to all data including LLM prompts, API keys, backend credentials), integrity (High — attacker can modify flows, poison training data, inject malicious prompts), and availability (High — attacker can delete flows or shut down the service).
Business impact is significant because Flowise often sits at the center of enterprise AI orchestration, handling proprietary business data, integration credentials, and acting as a gateway to LLM providers and internal APIs. Exploitation leads to:
- Data exfiltration of sensitive business documents processed through LLM flows.
- Credential theft of connected services (e.g., OpenAI API keys, database passwords).
- Reputation damage and regulatory non-compliance (GDPR, CCPA) if personal data is involved.
- Lateral movement into internal networks, as Flowise is frequently deployed on the corporate perimeter or in cloud environments with privileged IAM roles.
Blast radius is broad: the vulnerability affects all Flowise instances up to 3.0.13 regardless of deployment method (Docker, npm, source build), and because many production configurations do not set EXPRESS_SESSION_SECRET explicitly, this default path becomes a hidden backdoor.
Detection Guidance
Detect exploitation attempts by monitoring for anomalous session cookie patterns and authentication bypass indicators. The absence of a fixed signature makes request-header-based detection unreliable; focus on behavioral anomalies (e.g., admin-level API calls from unusual IPs, session enumeration, or rapid cookie generation). The rules below provide heuristics that should be tuned to the environment.
Sigma Rule
title: Flowise Session Hijacking via Default Express Session Secret
id: 8b1e6d2a-91bd-4f6e-9d53-7a1a8f2b3c44
status: experimental
description: Detects HTTP requests to Flowise with forged session cookies using the default secret 'flowise', indicated by anomalous session ID patterns or cookie lengths.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-56278
author: Valtersit Threat Intel
date: 2026/05/15
tags:
- attack.t1190
- cve.2026.56278
logsource:
category: webserver
product: access_log
detection:
selection_cookie:
cs-method: GET
cs-uri-query|contains|all:
- '/api/'
cs(User-Agent)|contains: 'curl'
# Cookie string for connect.sid with short session IDs (< 15 chars is suspicious)
sc-status: 200
filter_sid_length:
# Legit session IDs typically are >= 32 chars; forged ones may be shorter if attacker chose a short SID
cs(Cookie)|re: '^s:([^.]{1,15})\.[a-zA-Z0-9-_]{10,}$'
condition: selection_cookie and not filter_sid_length
falsepositives:
- Custom session configurations with intentionally short session IDs
level: high
Note: Sigma rules for session forgery are inherently noisy; this rule targets short session IDs combined with non-browser tool user-agents.
YARA Rule
rule Flowise_Default_Secret_Detection
{
meta:
description = "Detects source code or logs containing the Flowise default express-session secret"
author = "Valtersit Threat Intel"
date = "2026-05-15"
severity = "high"
cve = "CVE-2026-56278"
strings:
$secret_literal = "flowise" ascii nocase
$code_pattern = "EXPRESS_SESSION_SECRET" ascii
$cookie_pattern = "connect.sid" ascii
condition:
filesize < 10MB and
($secret_literal and $code_pattern) or
($cookie_pattern and $secret_literal)
}
Suricata IDS Rule
alert http any any -> $HOME_NET any (msg:"CVE-2026-56278 - Flowise Session Hijacking - Forged Cookie Pattern"; flow:established,to_server; http.cookie; content:"connect.sid"; content:"s:"; pcre:"/^s:[^.]{1,15}\.[a-zA-Z0-9_-]{10,}$/"; http.uri; content:"/api/"; metadata:cve CVE-2026-56278; classtype:attempted-admin; sid:202656278; rev:1;)
This rule flags HTTP cookies with suspiciously short session IDs. It may trigger false positives; tune the session ID length threshold based on observed baseline.
Elastic Detection
// EQL query to run against server access logs or proxy logs
// Looks for Flowise API endpoints accessed with cookies containing short session IDs
sequence by source.ip, host.name with maxspan=5m
[ network where destination.port == 443 and
http.request.method == "GET" and
http.request.body.text contains "connect.sid=s:"
] // request with cookie
[ network where
http.response.status_code == 200 and
url.path like "*api*"
]
where event.category == "web" and process.name == "nginx" or process.name == "httpd"
| where http.request.method in ("GET","POST")
| where url.path like "/api/*"
| eval cookie_value = http.request.cookie["connect.sid"]
| where wildcard(cookie_value, "s:*")
| eval sid_length = len(bytes(response.headers["set-cookie"])) // placeholder; actual eval of string length is version-specific
For production use, implement a custom Logstash field sid_length from the cookie string and search sid_length < 25.
Splunk SPL Query
index=weblog sourcetype=access_combined
| rex field=cookie "connect\.sid\=s:(?<session_id>[^\.]+)\."
| where len(session_id) < 25 // Legit Flowise SIDs are typically 32+ chars
| join type=inner host, source_ip [
search index=weblog sourcetype=access_combined uri_path="/api/*" status=200
]
| stats count by source_ip, host, http_user_agent, session_id, uri_path
| where count > 5 // brute-force or enumeration pattern
| table _time, source_ip, host, http_user_agent, session_id, uri_path, count
Wazuh OSSEC Rule
<group name="flowise,">
<rule id="100253" level="12">
<decoded_as>json</decoded_as>
<field name="url">/api/</field>
<regex>connect\.sid\=s:[^\.]{1,15}\.</regex>
<description>Flowise: Potential session hijacking via default secret (CVE-2026-56278) - forged short session ID observed</description>
<mitre>
<id>T1190</id>
</mitre>
<group>authentication_failures,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 2/4 (CLAIMED). No vendor advisory has been published; only the OSV database records a fix in Flowise 3.1.0. Assignee should independently verify the fix by reviewing the source code diff before upgrading.
1. Immediate Mitigations (do these now):
- Mandatory: Set the
EXPRESS_SESSION_SECRETenvironment variable to a strong, unique random value. This is the single most effective mitigation because it removes the default-path vulnerability. Generate a value withopenssl rand -base64 48. Update the Docker compose file or systemd unit and restart the service. - Network Segmentation: If Flowise must be internet-facing, place it behind a reverse proxy (Nginx/Caddy) that enforces IP whitelisting for admin interfaces, or restrict
/apiendpoints to corporate VPN ranges. - Session Hardening: Configure
express-sessionoptions likehttpOnly: true,secure: true(if HTTPS), andsameSite: 'strict'(if flow supports). Consider adding short session TTL. - Audit: Immediately review access logs for suspicious admin API calls from new/unexpected IPs; rotate any API keys stored within Flowise as a precaution.
2. Patch/Upgrade Steps:
- Upgrade to Flowise 3.1.0 or later once verified. The claimed fix removes the default secret or generates a random one at startup if
EXPRESS_SESSION_SECRETis unset. - Before upgrading, back up the Flowise config, flows, and database.
- After upgrading, test the login flow, create a new user, and verify session persistence.
- Independently confirm that the source code logic now rejects the
'flowise'default (checkpackages/server/src/enterprise/middleware/passport/index.ts).
3. Long-Term Hardening:
- Adopt an infrastructure-as-code approach (Terraform/Ansible) that enforces setting of required environment variables; configure Sentinel policies to fail deployment if
EXPRESS_SESSION_SECRETis missing. - Integrate Flowise startup checks: add a CI test that scans the running service with a probe script to verify that a forged cookie with secret
'flowise'does not succeed. - Subscribe to OSV/NVD alerts for Flowise to ensure rapid patching cycles.
- Regularly audit session cookie generation randomness (ensure the session store uses crypto-grade RNG).
References
As of this report (report date 2026-05-15), the vulnerability is not listed in CISA's Known Exploited Vulnerabilities (KEV) catalog. There is no evidence of active exploitation in the wild—the EPSS score of 0.00367 (29.4th percentile) suggests a relatively low near-term exploitation likelihood, though this metric is noisy and should not reduce urgency given the trivial exploitability. No known threat actor groups have publicly claimed campaigns targeting Flowise, but the platform's growing enterprise adoption makes it an attractive target for APT groups seeking LLM pipeline access and credential harvesting. The public PoC (described in Exploitation Scenarios) lowers the barrier to entry for low-skilled attackers; expect cybercrime groups to incorporate this into mass-scanning toolkits within weeks.
Monitoring recommendation: Check Shodan/Censys weekly for new Flowise exposures. Threat intel sources (e.g., GreyNoise, Recorded Future) should be queried for correlated scanning activity. Given that the fix is only claimed, there is a risk of incomplete vendor remediation—attackers may still exploit this in versions marked "patched" if the fix is flawed. Validate the 3.1.0 release in a staging environment before production deployment.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-56278
- OSV Database Entry: https://osv.dev/vulnerability/CVE-2026-56278 (source code: Flowise repo, packages/server/src/enterprise/middleware/passport/index.ts)
- Flowise GitHub Repository (affirmed affected, version tags): https://github.com/FlowiseAI/Flowise
- CWE-798: Use of Hard-coded Credentials — https://cwe.mitre.org/data/definitions/798.html
- express-session Documentation (session cookie signing mechanics): https://www.npmjs.com/package/express-session
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.