BrowExt - permissions & host_permissions

Reading time: 10 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

Basic Information

permissions

Permissions को extension के manifest.json फ़ाइल में permissions प्रॉपर्टी का उपयोग करके परिभाषित किया गया है और यह ब्राउज़र द्वारा एक्सेस किए जा सकने वाले लगभग किसी भी चीज़ तक पहुँच की अनुमति देता है (Cookies या Physical Storage):

पिछला मैनिफेस्ट यह घोषित करता है कि extension को storage अनुमति की आवश्यकता है। इसका मतलब है कि यह अपने डेटा को स्थायी रूप से स्टोर करने के लिए the storage API का उपयोग कर सकता है। Cookies या localStorage APIs के विपरीत, जो उपयोगकर्ताओं को कुछ स्तर का नियंत्रण देते हैं, extension storage को सामान्यतः केवल extension को अनइंस्टॉल करके ही साफ किया जा सकता है

एक extension अपनी manifest.json फ़ाइल में निर्दिष्ट अनुमतियों का अनुरोध करेगा और extension स्थापित करने के बाद, आप हमेशा अपने ब्राउज़र में इसकी अनुमतियों की जांच कर सकते हैं, जैसा कि इस छवि में दिखाया गया है:

आप Chromium Browser Extension द्वारा अनुरोधित अनुमतियों की पूरी सूची यहाँ पा सकते हैं और Firefox extensions के लिए पूरी सूची यहाँ है

host_permissions

वैकल्पिक लेकिन शक्तिशाली सेटिंग host_permissions यह संकेत करती है कि extension किन होस्टों के साथ APIs जैसे cookies, webRequest, और tabs के माध्यम से बातचीत करने में सक्षम होगा।

निम्नलिखित host_permissions मूल रूप से हर वेब की अनुमति देते हैं:

json
"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

ये वे होस्ट हैं जिन तक ब्राउज़र एक्सटेंशन स्वतंत्र रूप से पहुँच सकता है। इसका कारण यह है कि जब एक ब्राउज़र एक्सटेंशन fetch("https://gmail.com/") को कॉल करता है, तो यह CORS द्वारा प्रतिबंधित नहीं होता है।

permissions और host_permissions का दुरुपयोग

टैब

इसके अलावा, host_permissions “उन्नत” tabs API कार्यात्मकता को भी अनलॉक करता है। ये एक्सटेंशन को tabs.query() को कॉल करने की अनुमति देते हैं और न केवल उपयोगकर्ता के ब्राउज़र टैब की सूची प्राप्त करते हैं बल्कि यह भी जान सकते हैं कि कौन सा वेब पृष्ठ (अर्थात पता और शीर्षक) लोड हो रहा है

caution

केवल इतना ही नहीं, tabs.onUpdated जैसे श्रोता भी बहुत अधिक उपयोगी हो जाते हैं। इन्हें तब सूचित किया जाएगा जब कोई नया पृष्ठ एक टैब में लोड होता है।

सामग्री स्क्रिप्ट चलाना

सामग्री स्क्रिप्ट को एक्सटेंशन मैनिफेस्ट में स्थिर रूप से नहीं लिखा जाना चाहिए। पर्याप्त host_permissions के साथ, एक्सटेंशन उन्हें गतिशील रूप से लोड कर सकते हैं tabs.executeScript() या scripting.executeScript() को कॉल करके।

दोनों APIs केवल एक्सटेंशन में सामग्री स्क्रिप्ट के रूप में निहित फ़ाइलों को निष्पादित करने की अनुमति नहीं देती हैं बल्कि मनमाने कोड को भी निष्पादित करने की अनुमति देती हैं। पहला जावास्क्रिप्ट कोड को एक स्ट्रिंग के रूप में पास करने की अनुमति देता है जबकि दूसरा एक जावास्क्रिप्ट फ़ंक्शन की अपेक्षा करता है जो इंजेक्शन कमजोरियों के प्रति कम संवेदनशील होता है। फिर भी, यदि इनका दुरुपयोग किया जाए तो दोनों APIs तबाही मचा सकती हैं।

caution

ऊपर की क्षमताओं के अलावा, सामग्री स्क्रिप्ट उदाहरण के लिए क्रेडेंशियल्स को इंटरसेप्ट कर सकती हैं जब ये वेब पृष्ठों में दर्ज किए जाते हैं। इन्हें दुरुपयोग करने का एक और क्लासिक तरीका है हर एक वेबसाइट पर विज्ञापन इंजेक्ट करना। समाचार वेबसाइटों की विश्वसनीयता को दुरुपयोग करने के लिए धोखाधड़ी संदेश जोड़ना भी संभव है। अंततः, वे बैंकिंग वेबसाइटों को पैसे के ट्रांसफर को पुनर्निर्देशित करने के लिए हेरफेर कर सकते हैं।

निहित विशेषाधिकार

कुछ एक्सटेंशन विशेषाधिकार स्पष्ट रूप से घोषित करने की आवश्यकता नहीं है। एक उदाहरण tabs API है: इसकी मूल कार्यक्षमता बिना किसी विशेषाधिकार के सुलभ है। कोई भी एक्सटेंशन तब खोले जाने और बंद होने पर सूचित किया जा सकता है, यह केवल यह नहीं जानता कि ये टैब किस वेबसाइट से संबंधित हैं।

क्या यह बहुत हानिरहित लगता है? tabs.create() API कुछ कम हानिकारक है। इसका उपयोग एक नया टैब बनाने के लिए किया जा सकता है, जो मूल रूप से window.open() के समान है जिसे कोई भी वेबसाइट कॉल कर सकती है। फिर भी जबकि window.open() पॉप-अप ब्लॉकर के अधीन है, tabs.create() नहीं है।

caution

एक एक्सटेंशन जब चाहे तब किसी भी संख्या में टैब बना सकता है।

यदि आप संभावित tabs.create() पैरामीटर के माध्यम से देखते हैं, तो आप यह भी देखेंगे कि इसकी क्षमताएँ window.open() द्वारा नियंत्रित करने की अनुमति से कहीं अधिक हैं। और जबकि फ़ायरफ़ॉक्स इस API के साथ data: URIs के उपयोग की अनुमति नहीं देता है, क्रोम में ऐसी कोई सुरक्षा नहीं है। इस तरह के URIs के शीर्ष स्तर पर उपयोग को फिशिंग के लिए दुरुपयोग किए जाने के कारण प्रतिबंधित कर दिया गया है

tabs.update() tabs.create() के समान है लेकिन एक मौजूदा टैब को संशोधित करेगा। इसलिए एक दुर्भावनापूर्ण एक्सटेंशन उदाहरण के लिए मनमाने ढंग से आपके टैब में एक विज्ञापन पृष्ठ लोड कर सकता है, और यह संबंधित टैब को भी सक्रिय कर सकता है।

वेबकैम, भू-स्थान और मित्र

आप शायद जानते हैं कि वेबसाइटें विशेष अनुमतियाँ मांग सकती हैं, जैसे कि आपके वेबकैम (वीडियो कॉन्फ्रेंसिंग उपकरण) या भौगोलिक स्थान (मानचित्र) तक पहुँचने के लिए। यह दुरुपयोग की पर्याप्त संभावनाओं के साथ विशेषताएँ हैं, इसलिए उपयोगकर्ताओं को हर बार यह पुष्टि करनी होती है कि वे अभी भी इसे चाहते हैं।

caution

ब्राउज़र एक्सटेंशनों के साथ ऐसा नहीं है। यदि एक ब्राउज़र एक्सटेंशन आपके वेबकैम या माइक्रोफोन तक पहुँच चाहता है, तो इसे केवल एक बार अनुमति मांगने की आवश्यकता होती है।

आमतौर पर, एक एक्सटेंशन ऐसा करने के लिए स्थापित होने के तुरंत बाद ऐसा करेगा। एक बार जब इस प्रॉम्प्ट को स्वीकार कर लिया जाता है, तो किसी भी समय वेबकैम तक पहुँच संभव है, भले ही उपयोगकर्ता इस समय एक्सटेंशन के साथ बातचीत नहीं कर रहा हो। हाँ, एक उपयोगकर्ता केवल तभी इस प्रॉम्प्ट को स्वीकार करेगा जब एक्सटेंशन को वास्तव में वेबकैम की आवश्यकता हो। लेकिन उसके बाद उन्हें एक्सटेंशन पर भरोसा करना होगा कि वह कुछ भी गुप्त रूप से रिकॉर्ड नहीं करेगा।

आपके सटीक भौगोलिक स्थान या आपकी क्लिपबोर्ड की सामग्री तक पहुँच प्राप्त करने के लिए, अनुमति स्पष्ट रूप से देना पूरी तरह से अनावश्यक है। एक एक्सटेंशन बस अपने मैनिफेस्ट के permissions entry में geolocation या clipboard जोड़ता है। ये पहुँच विशेषाधिकार तब एक्सटेंशन स्थापित होने पर निहित रूप से दिए जाते हैं। इसलिए एक दुर्भावनापूर्ण या समझौता किया गया एक्सटेंशन इन विशेषाधिकारों के साथ आपकी गतिविधि प्रोफ़ाइल बना सकता है या बिना आपको कुछ भी नोटिस किए पासवर्ड की नकल के लिए आपके क्लिपबोर्ड की निगरानी कर सकता है।

history कीवर्ड को एक्सटेंशन मैनिफेस्ट के permissions entry में जोड़ने से history API तक पहुँच मिलती है। यह उपयोगकर्ता के पूरे ब्राउज़िंग इतिहास को एक बार में प्राप्त करने की अनुमति देता है, बिना उपयोगकर्ता को इन वेबसाइटों पर फिर से जाने की प्रतीक्षा किए।

bookmarks अनुमति में समान दुरुपयोग की संभावनाएँ हैं, यह सभी बुकमार्क्स को bookmarks API के माध्यम से पढ़ने की अनुमति देती है।

स्टोरेज अनुमति

एक्सटेंशन स्टोरेज केवल एक कुंजी-मूल्य संग्रह है, जो किसी भी वेबसाइट द्वारा उपयोग किए जा सकने वाले localStorage के समान है। इसलिए यहाँ कोई संवेदनशील जानकारी संग्रहीत नहीं की जानी चाहिए।

हालांकि, विज्ञापन कंपनियाँ भी इस स्टोरेज का दुरुपयोग कर सकती हैं।

अधिक अनुमतियाँ

आप यहाँ Chromium ब्राउज़र एक्सटेंशन द्वारा अनुरोधित अनुमतियों की पूरी सूची और Firefox एक्सटेंशनों के लिए पूरी सूची यहाँ** पा सकते हैं।**

रोकथाम

गूगल के डेवलपर की नीति स्पष्ट रूप से एक्सटेंशनों को उनकी कार्यक्षमता के लिए आवश्यक से अधिक विशेषाधिकार मांगने से मना करती है, जिससे अत्यधिक अनुमति अनुरोधों को प्रभावी ढंग से कम किया जा सके। एक उदाहरण जहां एक ब्राउज़र एक्सटेंशन ने इस सीमा को पार किया, वह इसके वितरण में था जो ब्राउज़र के साथ ही हुआ न कि किसी ऐड-ऑन स्टोर के माध्यम से।

ब्राउज़र एक्सटेंशन विशेषाधिकार के दुरुपयोग को और भी कम कर सकते हैं। उदाहरण के लिए, क्रोम के tabCapture और desktopCapture APIs, जो स्क्रीन रिकॉर्डिंग के लिए उपयोग किए जाते हैं, दुरुपयोग को कम करने के लिए डिज़ाइन किए गए हैं। tabCapture API केवल सीधे उपयोगकर्ता की बातचीत के माध्यम से सक्रिय किया जा सकता है, जैसे कि एक्सटेंशन आइकन पर क्लिक करना, जबकि desktopCapture को रिकॉर्ड किए जाने के लिए विंडो के लिए उपयोगकर्ता की पुष्टि की आवश्यकता होती है, जिससे गुप्त रिकॉर्डिंग गतिविधियों को रोका जा सके।

हालांकि, सुरक्षा उपायों को कड़ा करने से अक्सर एक्सटेंशनों की लचीलापन और उपयोगकर्ता-मित्रता में कमी आती है। activeTab permission इस व्यापार-बंद को दर्शाता है। इसे इस आवश्यकता को समाप्त करने के लिए पेश किया गया था कि एक्सटेंशनों को पूरे इंटरनेट में होस्ट विशेषाधिकारों के लिए अनुरोध करने की आवश्यकता हो, जिससे एक्सटेंशनों को केवल उपयोगकर्ता द्वारा स्पष्ट रूप से सक्रिय किए जाने पर वर्तमान टैब तक पहुँचने की अनुमति मिलती है। यह मॉडल उन एक्सटेंशनों के लिए प्रभावी है जिन्हें उपयोगकर्ता-प्रेरित क्रियाओं की आवश्यकता होती है लेकिन उन लोगों के लिए कमज़ोर है जिन्हें स्वचालित या पूर्व-निर्धारित क्रियाओं की आवश्यकता होती है, जिससे सुविधा और तात्कालिक प्रतिक्रिया में समझौता होता है।

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें