macOS Electron Applications Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
यदि आप नहीं जानते कि Electron क्या है, तो आप यहां बहुत सारी जानकारी पा सकते हैं। लेकिन अभी के लिए बस इतना जान लें कि Electron node चलाता है। और node के कुछ parameters और env variables हैं जिन्हें अन्य कोड निष्पादित करने के लिए उपयोग किया जा सकता है, जो निर्दिष्ट फ़ाइल के अलावा हैं।
इन तकनीकों पर अगली चर्चा की जाएगी, लेकिन हाल के समय में Electron ने कई सुरक्षा ध्वज जोड़े हैं ताकि उन्हें रोका जा सके। ये हैं Electron Fuses और ये वे हैं जो macOS में Electron ऐप्स को मनमाने कोड को लोड करने से रोकने के लिए उपयोग किए जाते हैं:
RunAsNode
: यदि अक्षम किया गया, तो यह कोड इंजेक्ट करने के लिए env var ELECTRON_RUN_AS_NODE
के उपयोग को रोकता है।
EnableNodeCliInspectArguments
: यदि अक्षम किया गया, तो --inspect
, --inspect-brk
जैसे params का सम्मान नहीं किया जाएगा। इस तरह कोड इंजेक्ट करने से बचना।
EnableEmbeddedAsarIntegrityValidation
: यदि सक्षम किया गया, तो लोड किया गया asar
file macOS द्वारा मान्य किया जाएगा। इस तरह कोड इंजेक्शन को रोकना इस फ़ाइल की सामग्री को संशोधित करके।
OnlyLoadAppFromAsar
: यदि यह सक्षम है, तो यह निम्नलिखित क्रम में लोड करने के लिए खोजने के बजाय: app.asar
, app
और अंततः default_app.asar
। यह केवल app.asar की जांच करेगा और इसका उपयोग करेगा, इस प्रकार यह सुनिश्चित करेगा कि जब embeddedAsarIntegrityValidation
फ्यूज़ के साथ संयुक्त किया जाता है, तो गैर-मान्य कोड को लोड करना असंभव है।
LoadBrowserProcessSpecificV8Snapshot
: यदि सक्षम किया गया, तो ब्राउज़र प्रक्रिया अपने V8 स्नैपशॉट के लिए browser_v8_context_snapshot.bin
नामक फ़ाइल का उपयोग करती है।
एक और दिलचस्प फ्यूज़ जो कोड इंजेक्शन को रोकने वाला नहीं है:
EnableCookieEncryption: यदि सक्षम किया गया, तो डिस्क पर कुकी स्टोर को OS स्तर की क्रिप्टोग्राफी कुंजियों का उपयोग करके एन्क्रिप्ट किया जाता है।
आप एक एप्लिकेशन से इन ध्वजों की जांच कर सकते हैं:
जैसा कि दस्तावेज़ों में उल्लेख किया गया है, Electron Fuses का कॉन्फ़िगरेशन Electron बाइनरी के अंदर कॉन्फ़िगर किया गया है जिसमें कहीं dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
स्ट्रिंग शामिल है।
macOS अनुप्रयोगों में यह आमतौर पर application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
में होता है।
आप इस फ़ाइल को https://hexed.it/ में लोड कर सकते हैं और पिछले स्ट्रिंग के लिए खोज कर सकते हैं। इस स्ट्रिंग के बाद आप ASCII में "0" या "1" संख्या देख सकते हैं जो दर्शाती है कि प्रत्येक फ्यूज़ अक्षम या सक्षम है। बस हेक्स कोड (0x30
का अर्थ 0
और 0x31
का अर्थ 1
) को फ्यूज़ मानों को संशोधित करने के लिए संशोधित करें।
ध्यान दें कि यदि आप इन बाइट्स को संशोधित करके Electron Framework
बाइनरी को किसी एप्लिकेशन के अंदर ओवरराइट करने की कोशिश करते हैं, तो ऐप नहीं चलेगा।
ऐसे बाहरी JS/HTML फ़ाइलें हो सकती हैं जिनका उपयोग एक Electron ऐप कर रहा है, इसलिए एक हमलावर इन फ़ाइलों में कोड इंजेक्ट कर सकता है जिनका हस्ताक्षर नहीं चेक किया जाएगा और ऐप के संदर्भ में मनमाना कोड निष्पादित कर सकता है।
हालांकि, वर्तमान में 2 सीमाएँ हैं:
एक ऐप को संशोधित करने के लिए kTCCServiceSystemPolicyAppBundles
अनुमति आवश्यक है, इसलिए डिफ़ॉल्ट रूप से यह अब संभव नहीं है।
संकलित asap
फ़ाइल में आमतौर पर फ्यूज़ embeddedAsarIntegrityValidation
और
onlyLoadAppFromAsar
सक्षम
होते हैं
इस हमले के रास्ते को और अधिक जटिल (या असंभव) बना रहा है।
ध्यान दें कि kTCCServiceSystemPolicyAppBundles
की आवश्यकता को बायपास करना संभव है, एप्लिकेशन को किसी अन्य निर्देशिका (जैसे /tmp
) में कॉपी करके, फ़ोल्डर का नाम app.app/Contents
से app.app/NotCon
में बदलकर, अपने दुष्ट कोड के साथ asar फ़ाइल को संशोधित करके, इसे फिर से app.app/Contents
नाम देकर और इसे निष्पादित करके।
आप asar फ़ाइल से कोड को अनपैक कर सकते हैं:
और इसे संशोधित करने के बाद फिर से पैक करें:
ELECTRON_RUN_AS_NODE
दस्तावेज़ों के अनुसार, यदि यह env वेरिएबल सेट किया गया है, तो यह प्रक्रिया को एक सामान्य Node.js प्रक्रिया के रूप में शुरू करेगा।
यदि फ्यूज़ RunAsNode
अक्षम है, तो env var ELECTRON_RUN_AS_NODE
को अनदेखा किया जाएगा, और यह काम नहीं करेगा।
जैसा कि यहां प्रस्तावित किया गया है, आप इस env वेरिएबल का दुरुपयोग एक plist में स्थिरता बनाए रखने के लिए कर सकते हैं:
NODE_OPTIONS
आप पेलोड को एक अलग फ़ाइल में स्टोर कर सकते हैं और इसे निष्पादित कर सकते हैं:
यदि फ्यूज़ EnableNodeOptionsEnvironmentVariable
अक्षम है, तो ऐप लॉन्च करते समय env var NODE_OPTIONS को अनदेखा करेगा जब तक कि env वेरिएबल ELECTRON_RUN_AS_NODE
सेट न हो, जिसे फ्यूज़ RunAsNode
के अक्षम होने पर भी अनदेखा किया जाएगा।
यदि आप ELECTRON_RUN_AS_NODE
सेट नहीं करते हैं, तो आपको त्रुटि मिलेगी: Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
आप इन कुंजियों को जोड़कर स्थिरता बनाए रखने के लिए plist में इस env वेरिएबल का दुरुपयोग कर सकते हैं:
According to this, यदि आप --inspect
, --inspect-brk
और --remote-debugging-port
जैसे फ्लैग के साथ एक Electron एप्लिकेशन चलाते हैं, तो एक डिबग पोर्ट खुला होगा ताकि आप इससे कनेक्ट कर सकें (उदाहरण के लिए Chrome में chrome://inspect
) और आप इस पर कोड इंजेक्ट करने में सक्षम होंगे या यहां तक कि नए प्रोसेस लॉन्च कर सकेंगे।
For example:
यदि फ्यूज़ EnableNodeCliInspectArguments
बंद है, तो ऐप नोड पैरामीटर (जैसे --inspect
) को लॉन्च करते समय अनदेखा करेगा जब तक कि env वेरिएबल ELECTRON_RUN_AS_NODE
सेट न हो, जिसे फ्यूज़ RunAsNode
बंद होने पर भी अनदेखा किया जाएगा।
हालांकि, आप इलेक्ट्रॉन पैराम --remote-debugging-port=9229
का उपयोग कर सकते हैं लेकिन पिछले पेलोड अन्य प्रक्रियाओं को निष्पादित करने के लिए काम नहीं करेगा।
पैराम --remote-debugging-port=9222
का उपयोग करके इलेक्ट्रॉन ऐप से कुछ जानकारी चुराना संभव है जैसे इतिहास (GET कमांड के साथ) या ब्राउज़र के कुकीज़ (क्योंकि वे ब्राउज़र के अंदर डिक्रिप्ट होते हैं और एक json एंडपॉइंट है जो उन्हें देगा)।
आप यह कैसे करना है यहां और यहां सीख सकते हैं और स्वचालित उपकरण WhiteChocolateMacademiaNut या एक साधारण स्क्रिप्ट का उपयोग कर सकते हैं जैसे:
In इस ब्लॉगपोस्ट, इस डिबगिंग का दुरुपयोग किया जाता है ताकि एक हेडलेस क्रोम मनमाने फ़ाइलों को मनमाने स्थानों पर डाउनलोड कर सके।
आप इस env वेरिएबल का दुरुपयोग एक plist में स्थिरता बनाए रखने के लिए इन कुंजियों को जोड़कर कर सकते हैं:
macOS का TCC डेमन निष्पादित एप्लिकेशन के संस्करण की जांच नहीं करता है। इसलिए यदि आप Electron एप्लिकेशन में कोड इंजेक्ट नहीं कर सकते किसी भी पिछले तकनीकों के साथ, तो आप APP का एक पिछला संस्करण डाउनलोड कर सकते हैं और उस पर कोड इंजेक्ट कर सकते हैं क्योंकि इसे अभी भी TCC विशेषाधिकार मिलेंगे (जब तक कि Trust Cache इसे रोक न दे)।
पिछली तकनीकें आपको electron एप्लिकेशन की प्रक्रिया के अंदर JS कोड चलाने की अनुमति देंगी। हालाँकि, याद रखें कि बच्चे की प्रक्रियाएँ माता-पिता एप्लिकेशन के समान सैंडबॉक्स प्रोफ़ाइल के तहत चलती हैं और उनकी TCC अनुमतियाँ विरासत में लेती हैं। इसलिए, यदि आप कैमरा या माइक्रोफ़ोन तक पहुँचने के लिए विशेषाधिकारों का दुरुपयोग करना चाहते हैं, तो आप बस प्रक्रिया से एक और बाइनरी चला सकते हैं।
उपकरण electroniz3r का उपयोग करना आसान है संवेदनशील electron एप्लिकेशन खोजने और उन पर कोड इंजेक्ट करने के लिए। यह उपकरण --inspect
तकनीक का उपयोग करने की कोशिश करेगा:
आपको इसे स्वयं संकलित करना होगा और आप इसे इस तरह उपयोग कर सकते हैं:
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)