BrowExt - permissions & host_permissions

Support HackTricks

Basic Information

permissions

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

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

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

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

host_permissions

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

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

"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() को कॉल करने की अनुमति देता है और न केवल उपयोगकर्ता के ब्राउज़र टैब की सूची प्राप्त करता है बल्कि यह भी जानता है कि कौन सा वेब पृष्ठ (अर्थात पता और शीर्षक) लोड हो रहा है

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

रोकथाम

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

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

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

संदर्भ

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

Last updated