
Rocket.Chat NoSQL इंजेक्शन (CVE-2021-22911) के लिए स्वचालित शोषण जो पासवर्ड रीसेट टोकन लीक करता है और बिना प्रमाणीकरण के खाता अधिग्रहण करता है।
Rocket.Chat (और Meteor-आधारित अनुप्रयोगों) के लिए एक स्वचालित शोषण स्क्रिप्ट जो NoSQL Injection का उपयोग करती है $where क्लॉज के माध्यम से सर्वर-साइड अपवादों के ज़रिए पासवर्ड रीसेट टोकन को लीक करने के लिए। एक बार टोकन लीक हो जाने पर, स्क्रिप्ट बिना प्रमाणीकरण के पासवर्ड रीसेट करती है।
प्रमाणीकरण: स्क्रिप्ट एक मानक उपयोगकर्ता के रूप में प्रमाणित होती है ताकि /api/v1/users.list एंडपॉइंट तक पहुँच प्राप्त कर सके।
NoSQL Injection: यह query पैरामीटर का उपयोग करके एक $where जावास्क्रिप्ट क्लॉज इंजेक्ट करता है।
डेटा एक्सफिल्ट्रेशन: इंजेक्शन के भीतर throw स्टेटमेंट का उपयोग करके, यह सर्वर को लक्षित उपयोगकर्ता के पासवर्ड रीसेट टोकन युक्त "uncaught exception" त्रुटि लौटाने के लिए मजबूर करता है।
अकाउंट टेकओवर: स्क्रिप्ट लीक किए गए टोकन का उपयोग करके resetPassword को कॉल करती है, लक्षित खाते का पासवर्ड बदल देती है।
Python 3.x
requests लाइब्रेरी
बैश
pip install requests
बैश
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 | Rocket.Chat इंस्टेंस का बेस URL। |