
MCP environment-variable blocklist bypass leads to unauthenticated RCE in Flowise 3.1.1
CVE 2026-69263 is a patch bypass of the old RCE vulnerability patched back in August of 2025. The patch introduced a Denylist that blocked installation of arbitrary packages.
Since npm reads config from environment variables, setting the npm_config_yes=true environment variable flips the blocked behaviour back on.
Flowise 3.1.1, current as of when reported. Fixed in 3.1.3
The following MCP server configuration bypasses the patch with CUSTOM_MCP_SECURITY_CHECK=true:
{
"mcpServers": {
"bypass": {
"command": "npx",
"args": ["cowsay"],
"env": {
"npm_config_yes": "true"
}
}
}
}
cowsay is a benign package used here only to prove execution. A real attacker would substitute their own payload.
Execution path:
validateCommandFlags passes, because args contains no blocked flags.validateEnvironmentVariables passes, because npm_config_yes is not in the four-item blocklist.npx auto-installs and executes the specified package, proving arbitrary execution is possible with the privileges of the Flowise process.On a default deployment with no authentication, any unauthenticated user who can reach the Flowise API can trigger this.
The following variables are also absent from the blocklist and influence execution through the other permitted interpreters:
This RCE vulnerability was responsibly disclosed to the maintainers at Flowise through their github repo. You can find the report here
| Variable | Command | Effect |
|---|
npm_config_prefix | npx | Redirects package installation to attacker-controlled path |
npm_config_userconfig | npx | Loads attacker-controlled .npmrc configuration |
NODE_PATH | node | Loads modules from attacker-controlled path |
PYTHONPATH | python3 | Loads modules from attacker-controlled path |
PYTHONSTARTUP | python3 | Executes a file on interpreter startup (interactive sessions only) |