# BrowExt - अनुमतियाँ और host\_permissions
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! HackTricks का समर्थन करने के अन्य तरीके: * यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! * [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह * 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) **का अनुसरण करें.** * **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
## मूल जानकारी ### **`permissions`** अनुमतियाँ एक्सटेंशन की **`manifest.json`** फाइल में **`permissions`** प्रॉपर्टी का उपयोग करके परिभाषित की जाती हैं और यह लगभग किसी भी चीज़ तक पहुँच प्रदान करती हैं जिस तक एक ब्राउज़र पहुँच सकता है (Cookies या Physical Storage): पिछली manifest घोषित करती है कि एक्सटेंशन को `storage` अनुमति की आवश्यकता है। इसका मतलब है कि यह [storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) का उपयोग करके अपना डेटा स्थायी रूप से स्टोर कर सकता है। cookies या `localStorage` APIs के विपरीत जो उपयोगकर्ताओं को कुछ स्तर का नियंत्रण प्रदान करते हैं, **एक्सटेंशन स्टोरेज को सामान्यतः केवल एक्सटेंशन को अनइंस्टॉल करके ही साफ किया जा सकता है**। एक एक्सटेंशन अपनी **`manifest.json`** फाइल में इंगित की गई अनुमतियों का अनुरोध करेगा और एक्सटेंशन इंस्टॉल करने के बाद, आप **हमेशा अपने ब्राउज़र में इसकी अनुमतियों की जाँच कर सकते हैं**, जैसा कि इस छवि में दिखाया गया है:
आप [**Chromium Browser Extension की अनुमतियों की पूरी सूची यहाँ अनुरोध कर सकते हैं**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) और [**Firefox एक्सटेंशन के लिए पूरी सूची यहाँ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**।** ### `host_permissions` वैकल्पिक लेकिन शक्तिशाली सेटिंग **`host_permissions`** यह इंगित करती है कि एक्सटेंशन किन होस्ट्स के साथ apis जैसे कि [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest), और [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) के माध्यम से इंटरैक्ट करने में सक्षम होगा। निम्नलिखित `host_permissions` मूल रूप से हर वेब को अनुमति देते हैं: ```json "host_permissions": [ "*://*/*" ] // Or: "host_permissions": [ "http://*/*", "https://*/*" ] // Or: "host_permissions": [ "" ] ``` ये वे होस्ट हैं जिन तक ब्राउज़र एक्सटेंशन स्वतंत्र रूप से पहुँच सकता है। यह इसलिए है क्योंकि जब एक ब्राउज़र एक्सटेंशन **`fetch("https://gmail.com/")`** को कॉल करता है तो यह CORS द्वारा प्रतिबंधित नहीं होता है। ## `permissions` और `host_permissions` का दुरुपयोग ### टैब्स इसके अलावा, **`host_permissions`** "उन्नत" [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **कार्यक्षमता को भी अनलॉक करते हैं।** ये एक्सटेंशन को [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) को कॉल करने और केवल **उपयोगकर्ता के ब्राउज़र टैब्स की सूची** प्राप्त करने की अनुमति नहीं देते हैं, बल्कि यह भी जानने की अनुमति देते हैं कि कौन सा **वेब पेज (अर्थात पता और शीर्षक) लोड है**। {% hint style="danger" %} केवल यही नहीं, [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) जैसे लिसनर्स **भी बहुत अधिक उपयोगी बन जाते हैं।** ये तब सूचित किए जाएंगे जब कोई नया पेज एक टैब में लोड होता है। {% endhint %} ### कंटेंट स्क्रिप्ट्स चलाना कंटेंट स्क्रिप्ट्स जरूरी नहीं कि स्थिर रूप से एक्सटेंशन मेनिफेस्ट में लिखी जाएं। पर्याप्त **`host_permissions`** होने पर, **एक्सटेंशन उन्हें गतिशील रूप से लोड कर सकते हैं [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **या** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript) **को कॉल करके।** दोनों APIs न केवल एक्सटेंशन में सम्मिलित फाइलों को कंटेंट स्क्रिप्ट्स के रूप में निष्पादित करने की अनुमति देते हैं, बल्कि **मनमाने कोड** को भी। पूर्व जावास्क्रिप्ट कोड को एक स्ट्रिंग के रूप में पास करने की अनुमति देता है जबकि उत्तर एक जावास्क्रिप्ट फंक्शन की अपेक्षा करता है जो इंजेक्शन भेद्यताओं के प्रति कम संवेदनशील होता है। फिर भी, दोनों APIs का दुरुपयोग होने पर विनाशकारी परिणाम हो सकते हैं। {% hint style="danger" %} उपरोक्त क्षमताओं के अलावा, कंटेंट स्क्रिप्ट्स उदाहरण के लिए **क्रेडेंशियल्स को इंटरसेप्ट** कर सकती हैं क्योंकि ये वेब पेजों में दर्ज की जाती हैं। उनका दुरुपयोग करने का एक और क्लासिक तरीका है **प्रत्येक वेबसाइट पर विज्ञापन इंजेक्ट करना**। समाचार वेबसाइटों की विश्वसनीयता का दुरुपयोग करने के लिए **धोखाधड़ी संदेश जोड़ना** भी संभव है। अंत में, वे **बैंकिंग** वेबसाइटों को मनिपुलेट कर सकते हैं ताकि पैसे के हस्तांतरण को रूट कर सकें। {% endhint %} ### अनुमानित विशेषाधिकार कुछ एक्सटेंशन विशेषाधिकारों को **स्पष्ट रूप से घोषित करने की आवश्यकता नहीं होती है**। एक उदाहरण है [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): इसकी मूल कार्यक्षमता किसी भी विशेषाधिकार के बिना सुलभ है। कोई भी एक्सटेंशन जब आप टैब्स खोलते हैं और बंद करते हैं तो सूचित किया जा सकता है, यह केवल यह नहीं जानेगा कि ये टैब्स किस वेबसाइट के साथ मेल खाते हैं। क्या यह बहुत हानिरहित लगता है? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) कुछ कम हानिरहित है। इसका उपयोग **नया टैब बनाने** के लिए किया जा सकता है, जो मूल रूप से [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) के समान है जिसे किसी भी वेबसाइट द्वारा कॉल किया जा सकता है। फिर भी `window.open()` **पॉप-अप ब्लॉकर के अधीन है, `tabs.create()` नहीं है।** {% hint style="danger" %} एक एक्सटेंशन जब चाहे तब कितने भी टैब्स बना सकता है। {% endhint %} यदि आप `tabs.create()` पैरामीटर्स के संभावित विकल्पों के माध्यम से देखते हैं, तो आप यह भी नोटिस करेंगे कि इसकी क्षमताएं `window.open()` को अनुमति देने वाली क्षमताओं से कहीं अधिक हैं। और जबकि Firefox इस API के साथ `data:` URIs का उपयोग करने की अनुमति नहीं देता है, Chrome में ऐसी कोई सुरक्षा नहीं है। **इस तरह के URIs का उपयोग शीर्ष स्तर पर किया गया है** [**फ़िशिंग के लिए दुरुपयोग किए जाने के कारण प्रतिबंधित किया गया है**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**।** [**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) `tabs.create()` के समान है लेकिन यह **मौजूदा टैब को संशोधित करेगा**। इसलिए एक दुर्भावनापूर्ण एक्सटेंशन उदाहरण के लिए आपके एक टैब में मनमाने रूप से एक विज्ञापन पेज लोड कर सकता है, और यह संबंधित टैब को सक्रिय भी कर सकता है। ### वेबकैम, भू-स्थान और मित्र आप शायद जानते हैं कि वेबसाइटें विशेष अनुमतियाँ मांग सकती हैं, जैसे कि आपके वेबकैम (वीडियो कॉन्फ्रेंसिंग टूल्स) या भौगोलिक स्थान (मानचित्र) तक पहुँचने के लिए। यह दुरुपयोग की काफी संभावना वाली सुविधाएँ हैं, इसलिए उपयोगकर्ताओं को हर बार पुष्टि करनी होती है कि वे अभी भी इसे चाहते हैं। {% hint style="danger" %} ब्राउज़र एक्सटेंशन के साथ ऐसा नहीं है। **यदि एक ब्राउज़र एक्सटेंशन** [**आपके वेबकैम या माइक्रोफोन तक पहुँच चाहता है**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, तो इसे केवल एक बार अनुमति मांगने की जरूरत है** {% endhint %} आमतौर पर, एक एक्सटेंशन ऐसा स्थापना के तुरंत बाद करेगा। एक बार यह प्रॉम्प्ट स्वीकार कर लिया जाता है, **वेबकैम तक पहुँच किसी भी समय संभव है**, भले ही उपयोगकर्ता इस समय एक्सटेंशन के साथ बातचीत नहीं कर रहा हो। हाँ, एक उपयोगकर्ता केवल तब इस प्रॉम्प्ट को स्वीकार करेगा जब एक्सटेंशन को वास्तव में वेबकैम तक पहुँच की आवश्यकता हो। लेकिन उसके बाद उन्हें एक्सटेंशन पर भरोसा करना होगा कि वह कुछ भी गुप्त रूप से रिकॉर्ड नहीं करेगा। [आपके सटीक भौगोलिक स्थान](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) या