Electron Desktop Apps
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 एक स्थानीय बैकएंड (जिसमें NodeJS) और एक फ्रंटएंड (Chromium) को जोड़ता है, हालांकि इसमें आधुनिक ब्राउज़रों के कुछ सुरक्षा तंत्रों की कमी है।
आमतौर पर आप इलेक्ट्रॉन ऐप कोड को एक .asar
एप्लिकेशन के अंदर पाएंगे, कोड प्राप्त करने के लिए आपको इसे निकालना होगा:
Electron ऐप के स्रोत कोड में, packet.json
के अंदर, आप main.js
फ़ाइल पा सकते हैं जहाँ सुरक्षा कॉन्फ़िग्स सेट किए गए हैं।
Electron के 2 प्रक्रिया प्रकार हैं:
मुख्य प्रक्रिया (NodeJS तक पूर्ण पहुंच है)
रेंडरर प्रक्रिया (सुरक्षा कारणों से NodeJS की सीमित पहुंच होनी चाहिए)
एक रेंडरर प्रक्रिया एक ब्राउज़र विंडो होगी जो एक फ़ाइल लोड कर रही है:
Settings of the renderer process can be configured in the main process inside the main.js file. Some of the configurations will prevent the Electron application to get RCE or other vulnerabilities if the settings are correctly configured.
The electron application could access the device via Node apis although it can be configure to prevent it:
nodeIntegration
- डिफ़ॉल्ट रूप से off
है। यदि चालू है, तो यह renderer process से node सुविधाओं तक पहुँचने की अनुमति देता है।
contextIsolation
- डिफ़ॉल्ट रूप से on
है। यदि बंद है, तो मुख्य और renderer प्रक्रियाएँ अलग नहीं होती हैं।
preload
- डिफ़ॉल्ट रूप से खाली है।
sandbox
- डिफ़ॉल्ट रूप से बंद है। यह NodeJS द्वारा किए जा सकने वाले कार्यों को प्रतिबंधित करेगा।
Node Integration in Workers
nodeIntegrationInSubframes
- डिफ़ॉल्ट रूप से off
है।
यदि nodeIntegration
सक्षम है, तो यह Electron एप्लिकेशन के भीतर ifram में लोड किए गए वेब पृष्ठों में Node.js APIs के उपयोग की अनुमति देगा।
यदि nodeIntegration
अक्षम है, तो प्रीलोड ifram में लोड होंगे।
Example of configuration:
कुछ RCE payloads यहाँ से:
स्टार्ट-मेन कॉन्फ़िगरेशन को संशोधित करें और एक प्रॉक्सी का उपयोग जोड़ें जैसे:
यदि आप स्थानीय रूप से एक Electron ऐप को निष्पादित कर सकते हैं, तो यह संभव है कि आप इसे मनमाने जावास्क्रिप्ट कोड को निष्पादित करने के लिए बना सकें। जानें कैसे:
macOS Electron Applications Injectionयदि nodeIntegration को on पर सेट किया गया है, तो एक वेब पृष्ठ का जावास्क्रिप्ट आसानी से Node.js सुविधाओं का उपयोग कर सकता है बस require()
को कॉल करके। उदाहरण के लिए, Windows पर calc एप्लिकेशन को निष्पादित करने का तरीका है:
इस सेटिंग में निर्दिष्ट स्क्रिप्ट renderer में अन्य स्क्रिप्ट्स से पहले लोड होती है, इसलिए इसके पास Node APIs तक असीमित पहुंच है:
इसलिए, स्क्रिप्ट पृष्ठों पर node-features को निर्यात कर सकती है:
यदि contextIsolation
चालू है, तो यह काम नहीं करेगा
contextIsolation वेब पृष्ठ स्क्रिप्ट और जावास्क्रिप्ट इलेक्ट्रॉन के आंतरिक कोड के बीच अलग-अलग संदर्भों को पेश करता है ताकि प्रत्येक कोड का जावास्क्रिप्ट निष्पादन एक-दूसरे को प्रभावित न करे। यह RCE की संभावना को समाप्त करने के लिए एक आवश्यक विशेषता है।
यदि संदर्भ अलग नहीं हैं, तो एक हमलावर कर सकता है:
renderer में मनमाना जावास्क्रिप्ट निष्पादित करें (XSS या बाहरी साइटों पर नेविगेशन)
प्रीलोड या इलेक्ट्रॉन के आंतरिक कोड में उपयोग की जाने वाली अंतर्निहित विधि को ओवरराइट करें
ओवरराइट की गई विधि का उपयोग करने के लिए ट्रिगर करें
RCE?
अंतर्निहित विधियों को ओवरराइट करने के लिए 2 स्थान हैं: प्रीलोड कोड में या इलेक्ट्रॉन के आंतरिक कोड में:
Electron contextIsolation RCE via preload codeElectron contextIsolation RCE via Electron internal codeElectron contextIsolation RCE via IPCयदि आप एक लिंक पर क्लिक करते समय प्रतिबंध लागू होते हैं, तो आप एक सामान्य बाएं क्लिक के बजाय मध्य क्लिक करके उन्हें बायपास करने में सक्षम हो सकते हैं।
इस उदाहरण के बारे में अधिक जानकारी के लिए देखें https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8 और https://benjamin-altpeter.de/shell-openexternal-dangers/
जब एक Electron डेस्कटॉप एप्लिकेशन को तैनात किया जाता है, तो nodeIntegration
और contextIsolation
के लिए सही सेटिंग्स सुनिश्चित करना महत्वपूर्ण है। यह स्थापित किया गया है कि क्लाइंट-साइड रिमोट कोड निष्पादन (RCE) जो प्रीलोड स्क्रिप्ट या मुख्य प्रक्रिया से Electron के मूल कोड को लक्षित करता है, इन सेटिंग्स के साथ प्रभावी रूप से रोका जाता है।
जब एक उपयोगकर्ता लिंक के साथ इंटरैक्ट करता है या नई विंडो खोलता है, तो विशिष्ट इवेंट लिस्नर्स ट्रिगर होते हैं, जो एप्लिकेशन की सुरक्षा और कार्यक्षमता के लिए महत्वपूर्ण होते हैं:
ये लिस्नर्स डेस्कटॉप एप्लिकेशन द्वारा ओवरराइड किए जाते हैं ताकि इसका अपना बिजनेस लॉजिक लागू किया जा सके। एप्लिकेशन यह मूल्यांकन करता है कि क्या एक नेविगेटेड लिंक को आंतरिक रूप से खोला जाना चाहिए या एक बाहरी वेब ब्राउज़र में। यह निर्णय आमतौर पर एक फ़ंक्शन, openInternally
के माध्यम से लिया जाता है। यदि यह फ़ंक्शन false
लौटाता है, तो इसका मतलब है कि लिंक को बाहरी रूप से खोला जाना चाहिए, shell.openExternal
फ़ंक्शन का उपयोग करते हुए।
यहां एक सरल प्सूडोकोड है:
Electron JS सुरक्षा सर्वोत्तम प्रथाएँ openExternal
फ़ंक्शन के साथ अविश्वसनीय सामग्री को स्वीकार करने के खिलाफ सलाह देती हैं, क्योंकि यह विभिन्न प्रोटोकॉल के माध्यम से RCE की ओर ले जा सकता है। ऑपरेटिंग सिस्टम विभिन्न प्रोटोकॉल का समर्थन करते हैं जो RCE को ट्रिगर कर सकते हैं। इस विषय पर विस्तृत उदाहरणों और आगे की व्याख्या के लिए, कोई इस संसाधन का संदर्भ ले सकता है, जिसमें इस भेद्यता का शोषण करने में सक्षम Windows प्रोटोकॉल के उदाहरण शामिल हैं।
Windows प्रोटोकॉल शोषण के उदाहरणों में शामिल हैं:
contextIsolation
को अक्षम करना <webview>
टैग के उपयोग की अनुमति देता है, जो <iframe>
के समान है, स्थानीय फ़ाइलों को पढ़ने और निकालने के लिए। एक उदाहरण दिया गया है जो इस भेद्यता का उपयोग करके आंतरिक फ़ाइलों की सामग्री पढ़ने का प्रदर्शन करता है:
इसके अलावा, एक आंतरिक फ़ाइल पढ़ने के लिए एक और विधि साझा की गई है, जो एक Electron डेस्कटॉप ऐप में एक महत्वपूर्ण स्थानीय फ़ाइल पढ़ने की भेद्यता को उजागर करती है। इसमें डेटा निकालने और एप्लिकेशन का शोषण करने के लिए एक स्क्रिप्ट इंजेक्ट करना शामिल है:
यदि एप्लिकेशन द्वारा उपयोग किया जाने वाला chromium पुराना है और इसमें ज्ञात कमजोरियाँ हैं, तो इसे शोषित करना और XSS के माध्यम से RCE प्राप्त करना संभव हो सकता है। आप इस writeup में एक उदाहरण देख सकते हैं: https://blog.electrovolt.io/posts/discord-rce/
मान लीजिए कि आपने एक XSS पाया है लेकिन आप RCE को ट्रिगर नहीं कर सकते या आंतरिक फ़ाइलें चुरा नहीं सकते, तो आप इसे फ़िशिंग के माध्यम से क्रेडेंशियल्स चुराने के लिए उपयोग करने की कोशिश कर सकते हैं।
सबसे पहले, आपको यह जानने की आवश्यकता है कि जब आप एक नया URL खोलने की कोशिश करते हैं, तो फ्रंट-एंड में JS कोड की जांच करते समय क्या होता है:
openInternally
को कॉल करने से यह तय होगा कि link desktop window में खुलेगा क्योंकि यह प्लेटफ़ॉर्म से संबंधित एक लिंक है, या यह browser में 3rd party resource के रूप में खुलेगा।
यदि फ़ंक्शन द्वारा उपयोग किया गया regex bypasses के लिए vulnerable है (उदाहरण के लिए subdomains के डॉट्स को escape न करके), तो एक हमलावर XSS का दुरुपयोग कर सकता है एक नई विंडो खोलने के लिए जो हमलावर के बुनियादी ढांचे में स्थित होगी उपयोगकर्ता से क्रेडेंशियल्स मांगते हुए:
Electronegativity एक उपकरण है जो Electron-आधारित अनुप्रयोगों में गलत कॉन्फ़िगरेशन और सुरक्षा एंटी-पैटर्न की पहचान करता है।
Electrolint Electron अनुप्रयोगों के लिए एक ओपन सोर्स VS कोड प्लगइन है जो Electronegativity का उपयोग करता है।
nodejsscan कमजोर तृतीय पक्ष पुस्तकालयों की जांच करने के लिए
Electro.ng: आपको इसे खरीदना होगा
https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s में आप कमजोर Electron अनुप्रयोगों का शोषण करने के लिए एक प्रयोगशाला पा सकते हैं।
कुछ कमांड जो आपको प्रयोगशाला में मदद करेंगे:
Electron सुरक्षा के बारे में अधिक शोध और लेख https://github.com/doyensec/awesome-electronjs-hacking
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)