hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md

16 KiB

BrowExt - अनुमतियाँ और host_permissions

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मूल जानकारी

permissions

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

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

{% hint style="danger" %} केवल यही नहीं, tabs.onUpdated जैसे लिसनर्स भी बहुत अधिक उपयोगी बन जाते हैं। ये तब सूचित किए जाएंगे जब कोई नया पेज एक टैब में लोड होता है। {% endhint %}

कंटेंट स्क्रिप्ट्स चलाना

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

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

{% hint style="danger" %} उपरोक्त क्षमताओं के अलावा, कंटेंट स्क्रिप्ट्स उदाहरण के लिए क्रेडेंशियल्स को इंटरसेप्ट कर सकती हैं क्योंकि ये वेब पेजों में दर्ज की जाती हैं। उनका दुरुपयोग करने का एक और क्लासिक तरीका है प्रत्येक वेबसाइट पर विज्ञापन इंजेक्ट करना। समाचार वेबसाइटों की विश्वसनीयता का दुरुपयोग करने के लिए धोखाधड़ी संदेश जोड़ना भी संभव है। अंत में, वे बैंकिंग वेबसाइटों को मनिपुलेट कर सकते हैं ताकि पैसे के हस्तांतरण को रूट कर सकें। {% endhint %}

अनुमानित विशेषाधिकार

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

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

{% hint style="danger" %} एक एक्सटेंशन जब चाहे तब कितने भी टैब्स बना सकता है। {% endhint %}

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

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

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

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

{% hint style="danger" %} ब्राउज़र एक्सटेंशन के साथ ऐसा नहीं है। यदि एक ब्राउज़र एक्सटेंशन आपके वेबकैम या माइक्रोफोन तक पहुँच चाहता है, तो इसे केवल एक बार अनुमति मांगने की जरूरत है {% endhint %}

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

आपके सटीक भौगोलिक स्थान या