Node inspector/CEF debug abuse
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
From the docs: जब --inspect
स्विच के साथ शुरू किया जाता है, तो एक Node.js प्रक्रिया एक डिबगिंग क्लाइंट के लिए सुनती है। डिफ़ॉल्ट रूप से, यह होस्ट और पोर्ट 127.0.0.1:9229
पर सुनती है। प्रत्येक प्रक्रिया को एक विशिष्ट UUID भी सौंपा जाता है।
इंस्पेक्टर क्लाइंट को कनेक्ट करने के लिए होस्ट पता, पोर्ट और UUID जानना और निर्दिष्ट करना चाहिए। एक पूर्ण URL कुछ इस तरह दिखेगा ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
।
चूंकि डिबगर को Node.js निष्पादन वातावरण तक पूर्ण पहुंच है, एक दुर्भावनापूर्ण अभिनेता जो इस पोर्ट से कनेक्ट करने में सक्षम है, Node.js प्रक्रिया की ओर से मनमाना कोड निष्पादित करने में सक्षम हो सकता है (संभावित विशेषाधिकार वृद्धि).
इंस्पेक्टर शुरू करने के कई तरीके हैं:
जब आप एक निरीक्षित प्रक्रिया शुरू करते हैं, तो कुछ ऐसा दिखाई देगा:
Processes based on CEF (Chromium Embedded Framework) को debugger खोलने के लिए --remote-debugging-port=9222
पैरामीटर का उपयोग करना आवश्यक है (SSRF सुरक्षा बहुत समान रहती है)। हालाँकि, वे NodeJS debug सत्र प्रदान करने के बजाय ब्राउज़र के साथ Chrome DevTools Protocol का उपयोग करके संवाद करेंगे, यह ब्राउज़र को नियंत्रित करने के लिए एक इंटरफ़ेस है, लेकिन कोई सीधा RCE नहीं है।
जब आप एक डिबग किए गए ब्राउज़र को शुरू करते हैं, तो कुछ ऐसा दिखाई देगा:
Browsers, WebSockets and same-origin policy
वेबसाइटें जो वेब-ब्राउज़र में खुलती हैं, वे ब्राउज़र सुरक्षा मॉडल के तहत WebSocket और HTTP अनुरोध कर सकती हैं। एक प्रारंभिक HTTP कनेक्शन आवश्यक है ताकि एक अद्वितीय डिबगर सत्र आईडी प्राप्त की जा सके। same-origin-policy रोकता है वेबसाइटों को इस HTTP कनेक्शन को बनाने से। DNS rebinding हमलों** के खिलाफ अतिरिक्त सुरक्षा के लिए,** Node.js यह सत्यापित करता है कि कनेक्शन के लिए 'Host' हेडर या तो एक IP पता या localhost
या localhost6
को सटीक रूप से निर्दिष्ट करते हैं।
यह सुरक्षा उपाय निरीक्षक का शोषण करने से रोकता है कोड चलाने के लिए बस एक HTTP अनुरोध भेजकर (जो एक SSRF vuln का शोषण करके किया जा सकता है)।
चल रहे प्रक्रियाओं में निरीक्षक शुरू करना
आप एक चल रहे nodejs प्रक्रिया को सिग्नल SIGUSR1 भेज सकते हैं ताकि यह डिफ़ॉल्ट पोर्ट में निरीक्षक शुरू करे। हालाँकि, ध्यान दें कि आपके पास पर्याप्त विशेषाधिकार होना चाहिए, इसलिए यह आपको प्रक्रिया के अंदर जानकारी तक विशेषाधिकार प्राप्त पहुंच दे सकता है लेकिन सीधे विशेषाधिकार वृद्धि नहीं।
यह कंटेनरों में उपयोगी है क्योंकि प्रक्रिया को बंद करना और एक नई प्रक्रिया शुरू करना --inspect
के साथ विकल्प नहीं है क्योंकि कंटेनर को प्रक्रिया के साथ मार दिया जाएगा।
निरीक्षक/debugger से कनेक्ट करें
Chromium-आधारित ब्राउज़र से कनेक्ट करने के लिए, Chrome या Edge के लिए chrome://inspect
या edge://inspect
URLs का उपयोग किया जा सकता है। Configure बटन पर क्लिक करके यह सुनिश्चित किया जाना चाहिए कि लक्ष्य होस्ट और पोर्ट सही ढंग से सूचीबद्ध हैं। चित्र एक Remote Code Execution (RCE) उदाहरण दिखाता है:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2214728956-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FPfJnr5ak4G3jo9UcZF4y%252Fuploads%252Fgit-blob-a508ab7ae0c49543e0de84d5e01d61516b59f7b7%252Fimage%2520%28674%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=86cb848a&sv=1)
कमांड लाइन का उपयोग करके आप एक debugger/inspector से कनेक्ट कर सकते हैं:
यह उपकरण https://github.com/taviso/cefdebug स्थानीय रूप से चल रहे निरीक्षकों को खोजने और उनमें कोड इंजेक्ट करने की अनुमति देता है।
ध्यान दें कि NodeJS RCE हमले काम नहीं करेंगे यदि Chrome DevTools Protocol के माध्यम से ब्राउज़र से जुड़े हों (आपको इसके साथ करने के लिए दिलचस्प चीजें खोजने के लिए API की जांच करनी होगी)।
NodeJS Debugger/Inspector में RCE
जब आप Node inspector से जुड़ सकते हैं, तो RCE प्राप्त करने के कुछ सामान्य तरीके हैं, जैसे कि (लगता है कि यह Chrome DevTools protocol के साथ कनेक्शन में काम नहीं करेगा):
Chrome DevTools Protocol Payloads
You can check the API here: https://chromedevtools.github.io/devtools-protocol/ In this section I will just list interesting things I find people have used to exploit this protocol.
Parameter Injection via Deep Links
In the CVE-2021-38112 Rhino security ने खोजा कि CEF पर आधारित एक एप्लिकेशन ने सिस्टम में एक कस्टम URI (workspaces://) पंजीकृत किया जो पूर्ण URI प्राप्त करता था और फिर CEF आधारित एप्लिकेशन को उस URI से आंशिक रूप से निर्मित कॉन्फ़िगरेशन के साथ लॉन्च करता था।
यह पता चला कि URI पैरामीटर URL डिकोड किए गए थे और CEF बेसिक एप्लिकेशन को लॉन्च करने के लिए उपयोग किए गए थे, जिससे एक उपयोगकर्ता को --gpu-launcher
फ्लैग को कमांड लाइन में इंजेक्ट करने और मनमाने कार्यों को निष्पादित करने की अनुमति मिली।
So, a payload like:
Will execute a calc.exe.
Overwrite Files
डाउनलोड की गई फ़ाइलों को सहेजने के लिए फ़ोल्डर बदलें और एक फ़ाइल डाउनलोड करें ताकि आप अपने दुष्ट कोड के साथ एप्लिकेशन के अक्सर उपयोग किए जाने वाले स्रोत कोड को ओवरराइट कर सकें।
Webdriver RCE और exfiltration
इस पोस्ट के अनुसार: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 RCE प्राप्त करना और theriver से आंतरिक पृष्ठों को exfiltrate करना संभव है।
Post-Exploitation
एक वास्तविक वातावरण में और एक उपयोगकर्ता PC को समझौता करने के बाद जो Chrome/Chromium आधारित ब्राउज़र का उपयोग करता है, आप debugging सक्रियित करके और debugging port को port-forward करके एक Chrome प्रक्रिया शुरू कर सकते हैं ताकि आप इसे एक्सेस कर सकें। इस तरह आप विक्टिम द्वारा Chrome के साथ किए गए सभी कार्यों का निरीक्षण कर सकेंगे और संवेदनशील जानकारी चुरा सकेंगे।
गुप्त तरीके से हर Chrome प्रक्रिया को समाप्त करना और फिर कुछ ऐसा कॉल करना है
References
सीखें और AWS हैकिंग का अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
सीखें और GCP हैकिंग का अभ्यास करें:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated