Translated ['pentesting-web/browser-extension-pentesting-methodology/REA

This commit is contained in:
Translator 2024-07-31 09:36:15 +00:00
parent 1e9bdd5714
commit 73a9f5acc2

View file

@ -1,8 +1,8 @@
# Browser Extension Pentesting Methodology
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -27,7 +27,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
### **Content Scripts**
प्रत्येक कंटेंट स्क्रिप्ट के पास **एकल वेब पृष्ठ** के DOM तक सीधी पहुंच होती है और इस प्रकार यह **संभावित रूप से दुर्भावनापूर्ण इनपुट** के लिए उजागर होता है। हालाँकि, कंटेंट स्क्रिप्ट में एक्सटेंशन को संदेश भेजने की क्षमता के अलावा कोई अनुमतियाँ नहीं होती है
प्रत्येक कंटेंट स्क्रिप्ट के पास **एकल वेब पृष्ठ** के DOM तक सीधी पहुंच होती है और इस प्रकार यह **संभावित रूप से दुर्भावनापूर्ण इनपुट** के लिए उजागर होता है। हालाँकि, कंटेंट स्क्रिप्ट में एक्सटेंशन को संदेश भेजने की क्षमता के अलावा कोई अनुमति नहीं होती है।
### **Extension Core**
@ -49,7 +49,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
## **`manifest.json`**
एक क्रोम एक्सटेंशन बस एक ज़िप फ़ोल्डर है जिसमें [.crx फ़ाइल एक्सटेंशन](https://www.lifewire.com/crx-file-2620391) होता है। एक्सटेंशन का कोर फ़ोल्डर के रूट में **`manifest.json`** फ़ाइल है, जो लेआउट, अनुमतियों और अन्य कॉन्फ़िगरेशन विकल्पों को निर्दिष्ट करता है।
एक क्रोम एक्सटेंशन बस एक ज़िप फ़ोल्डर है जिसमें [.crx फ़ाइल एक्सटेंशन](https://www.lifewire.com/crx-file-2620391) होता है। एक्सटेंशन का कोर फ़ोल्डर के रूट पर **`manifest.json`** फ़ाइल है, जो लेआउट, अनुमतियों और अन्य कॉन्फ़िगरेशन विकल्पों को निर्दिष्ट करता है।
Example:
```json
@ -84,7 +84,7 @@ Example:
```
### `content_scripts`
कंटेंट स्क्रिप्ट्स **लोड** होती हैं जब भी उपयोगकर्ता **मेल खाने वाले पृष्ठ पर नेविगेट** करता है, हमारे मामले में कोई भी पृष्ठ जो **`https://example.com/*`** अभिव्यक्ति से मेल खाता है और **`*://*/*/business*`** regex से मेल नहीं खाता। ये **पृष्ठ के अपने स्क्रिप्ट्स की तरह** निष्पादित होती हैं और पृष्ठ के [डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document\_Object\_Model) तक मनमाना पहुंच होती है।
कंटेंट स्क्रिप्ट्स **लोड** होती हैं जब भी उपयोगकर्ता **मिलते-जुलते पृष्ठ पर नेविगेट** करता है, हमारे मामले में कोई भी पृष्ठ जो **`https://example.com/*`** अभिव्यक्ति से मेल खाता है और **`*://*/*/business*`** regex से मेल नहीं खाता। ये **पृष्ठ के अपने स्क्रिप्ट्स की तरह** निष्पादित होती हैं और पृष्ठ के [डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document\_Object\_Model) तक मनमाना पहुंच होती है।
```json
"content_scripts": [
{
@ -99,9 +99,9 @@ Example:
}
],
```
अधिक URLs को शामिल या बाहर करने के लिए **`include_globs`** और **`exclude_globs`** का उपयोग करना भी संभव है।
URLs को शामिल या बाहर करने के लिए **`include_globs`** और **`exclude_globs`** का उपयोग करना भी संभव है।
यह एक उदाहरण सामग्री स्क्रिप्ट है जो पृष्ठ पर एक व्याख्या बटन जोड़ेगी जब [स्टोरेज API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) का उपयोग करके एक्सटेंशन के स्टोरेज से `message` मान प्राप्त किया जाएगा।
यह एक उदाहरण सामग्री स्क्रिप्ट है जो पृष्ठ पर एक व्याख्या बटन जोड़ेगी जब [स्टोरेज API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) े एक्सटेंशन के स्टोरेज से `message` मान प्राप्त किया जाएगा।
```js
chrome.storage.local.get("message", result =>
{
@ -119,21 +119,21 @@ document.body.appendChild(div);
जब इस बटन पर क्लिक किया जाता है, तो सामग्री स्क्रिप्ट द्वारा एक्सटेंशन पृष्ठों को एक संदेश भेजा जाता है, [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage) का उपयोग करके। यह सामग्री स्क्रिप्ट की APIs तक सीधे पहुंच की सीमा के कारण है, जिसमें `storage` कुछ अपवादों में से एक है। इन अपवादों से परे कार्यक्षमताओं के लिए, संदेश एक्सटेंशन पृष्ठों पर भेजे जाते हैं जिनसे सामग्री स्क्रिप्ट संवाद कर सकती हैं।
{% hint style="warning" %}
ब्राउज़र के आधार पर, सामग्री स्क्रिप्ट की क्षमताएँ थोड़ी भिन्न हो सकती हैं। क्रोमियम-आधारित ब्राउज़रों के लिए, क्षमताओं की सूची [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content\_scripts/#capabilities) में उपलब्ध है, और फ़ायरफ़ॉक्स के लिए, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content\_scripts#webextension\_apis) प्राथमिक स्रोत के रूप में कार्य करता है।\
ब्राउज़र के आधार पर, सामग्री स्क्रिप्ट की क्षमताएँ थोड़ी भिन्न हो सकती हैं। क्रोमियम-आधारित ब्राउज़रों के लिए, क्षमताओं की सूची [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content\_scripts/#capabilities) में उपलब्ध है, और फ़ायरफ़ॉक्स के लिए, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content\_scripts#webextension\_apis) मुख्य स्रोत के रूप में कार्य करता है।\
यह भी ध्यान देने योग्य है कि सामग्री स्क्रिप्ट के पास बैकग्राउंड स्क्रिप्ट के साथ संवाद करने की क्षमता होती है, जिससे उन्हें क्रियाएँ करने और प्रतिक्रियाएँ वापस भेजने की अनुमति मिलती है।
{% endhint %}
Chrome में सामग्री स्क्रिप्ट को देखने और डिबग करने के लिए, Chrome डेवलपर टूल मेनू को Options > More tools > Developer tools से या Ctrl + Shift + I दबाकर एक्सेस किया जा सकता है।
डेवलपर टूल प्रदर्शित होने पर, **Source tab** पर क्लिक किया जाना चाहिए, उसके बाद **Content Scripts** टैब। यह विभिन्न एक्सटेंशनों से चल रही सामग्री स्क्रिप्ट्स का अवलोकन करने और निष्पादन प्रवाह को ट्रैक करने के लिए ब्रेकपॉइंट सेट करने की अनुमति देता है।
डेवलपर टूल प्रदर्शित होने पर, **Source tab** पर क्लिक किया जाना चाहिए, उसके बाद **Content Scripts** टैब। यह विभिन्न एक्सटेंशनों से चल रही सामग्री स्क्रिप्ट को देखने और निष्पादन प्रवाह को ट्रैक करने के लिए ब्रेकपॉइंट सेट करने की अनुमति देता है।
### Injected content scripts
{% hint style="success" %}
ध्यान दें कि **Content Scripts अनिवार्य नहीं हैं** क्योंकि यह **डायनामिकली** **inject** स्क्रिप्ट्स और **programatically inject** करने के लिए भी संभव है **`tabs.executeScript`** के माध्यम से। यह वास्तव में अधिक **granular controls** प्रदान करता है।
ध्यान दें कि **Content Scripts अनिवार्य नहीं हैं** क्योंकि यह **डायनामिकली** **inject** स्क्रिप्ट करने और **`tabs.executeScript`** के माध्यम से वेब पृष्ठों में **प्रोग्रामेटिकली** उन्हें **inject** करने की भी संभावना है। यह वास्तव में अधिक **granular controls** प्रदान करता है।
{% endhint %}
एक सामग्री स्क्रिप्ट के प्रोग्रामेटिक इंजेक्शन के लिए, एक्सटेंशन को उस पृष्ठ के लिए [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) होना आवश्यक है जिसमें स्क्रिप्ट्स को इंजेक्ट किया जाना है। ये अनुमतियाँ या तो एक्सटेंशन के मैनिफेस्ट में **उनकी मांग करके** या [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) के माध्यम से अस्थायी आधार पर सुरक्षित की जा सकती हैं।
एक सामग्री स्क्रिप्ट के प्रोग्रामेटिक इंजेक्शन के लिए, एक्सटेंशन को उस पृष्ठ के लिए [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) की आवश्यकता होती है जिसमें स्क्रिप्ट को इंजेक्ट किया जाना है। ये अनुमतियाँ या तो एक्सटेंशन के मैनिफेस्ट में **उनकी मांग करके** या [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) के माध्यम से अस्थायी आधार पर सुरक्षित की जा सकती हैं।
#### Example activeTab-based extension
@ -206,7 +206,7 @@ URLs को शामिल या बाहर करने के लिए **
* **`document_idle`**: जब भी संभव हो
* **`document_start`**: `css` से किसी भी फ़ाइल के बाद, लेकिन किसी अन्य DOM के निर्माण या किसी अन्य स्क्रिप्ट के चलने से पहले।
* **`document_end`**: DOM के पूर्ण होने के तुरंत बाद, लेकिन उप-संसाधनों जैसे छवियों और फ़्रेमों के लोड होने से पहले।
* **`document_end`**: DOM के पूर्ण होने के तुरंत बाद, लेकिन छवियों और फ़्रेम जैसे उप-संसाधनों के लोड होने से पहले।
#### `manifest.json` के माध्यम से
```json
@ -235,16 +235,16 @@ js : [ "contentScript.js" ],
```
### `background`
संदेश जो सामग्री स्क्रिप्ट द्वारा भेजे जाते हैं, उन्हें **बैकग्राउंड पेज** द्वारा प्राप्त किया जाता है, जो एक्सटेंशन के घटकों के समन्वय में एक केंद्रीय भूमिका निभाता है। विशेष रूप से, बैकग्राउंड पेज एक्सटेंशन के जीवनकाल के दौरान बना रहता है, सीधे उपयोगकर्ता इंटरैक्शन के बिना काम करता है। इसमें अपना खुद का डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM) होता है, जो जटिल इंटरैक्शन और स्थिति प्रबंधन की अनुमति देता है।
सामग्री स्क्रिप्ट द्वारा भेजे गए संदेश **बैकग्राउंड पेज** द्वारा प्राप्त होते हैं, जो एक्सटेंशन के घटकों के समन्वय में एक केंद्रीय भूमिका निभाता है। विशेष रूप से, बैकग्राउंड पेज एक्सटेंशन के जीवनकाल के दौरान बना रहता है, सीधे उपयोगकर्ता इंटरैक्शन के बिना काम करता है। इसमें अपना खुद का डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM) होता है, जो जटिल इंटरैक्शन और स्थिति प्रबंधन को सक्षम बनाता है।
**मुख्य बिंदु**:
* **बैकग्राउंड पेज की भूमिका:** एक्सटेंशन के लिए नर्व सेंटर के रूप में कार्य करता है, विभिन्न भागों के बीच संचार और समन्वय सुनिश्चित करता है।
* **स्थिरता:** यह एक हमेशा उपस्थित इकाई है, उपयोगकर्ता के लिए अदृश्य लेकिन एक्सटेंशन की कार्यक्षमता के लिए अनिवार्य है।
* **स्वचालित निर्माण:** यदि स्पष्ट रूप से परिभाषित नहीं किया गया है, तो ब्राउज़र स्वचालित रूप से एक बैकग्राउंड पेज बनाएगा। यह स्वचालित रूप से उत्पन्न पृष्ठ एक्सटेंशन के मैनिफेस्ट में निर्दिष्ट सभी बैकग्राउंड स्क्रिप्ट्स को शामिल करेगा, जिससे एक्सटेंशन के बैकग्राउंड कार्यों का निर्बाध संचालन सुनिश्चित होता है।
* **स्वचालित निर्माण:** यदि स्पष्ट रूप से परिभाषित नहीं किया गया है, तो ब्राउज़र स्वचालित रूप से एक बैकग्राउंड पेज बनाएगा। यह स्वचालित रूप से उत्पन्न पृष्ठ एक्सटेंशन के मैनिफेस्ट में निर्दिष्ट सभी बैकग्राउंड स्क्रिप्ट को शामिल करेगा, जिससे एक्सटेंशन के बैकग्राउंड कार्यों का निर्बाध संचालन सुनिश्चित होता है।
{% hint style="success" %}
ब्राउज़र द्वारा स्वचालित रूप से बैकग्राउंड पेज उत्पन्न करने की सुविधा (जब स्पष्ट रूप से घोषित नहीं किया गया हो) यह सुनिश्चित करती है कि सभी आवश्यक बैकग्राउंड स्क्रिप्ट्स एकीकृत और कार्यशील हैं, जिससे एक्सटेंशन की सेटअप प्रक्रिया को सरल बनाया जा सके।
ब्राउज़र द्वारा स्वचालित रूप से बैकग्राउंड पेज उत्पन्न करने की सुविधा (जब स्पष्ट रूप से घोषित नहीं किया गया हो) यह सुनिश्चित करती है कि सभी आवश्यक बैकग्राउंड स्क्रिप्ट एकीकृत और कार्यशील हैं, जिससे एक्सटेंशन की सेटअप प्रक्रिया को सरल बनाया जा सके।
{% endhint %}
Example background script:
@ -259,7 +259,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
```
यह [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) का उपयोग संदेशों को सुनने के लिए करता है। जब एक `"explain"` संदेश प्राप्त होता है, तो यह [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) का उपयोग करके एक नए टैब में एक पृष्ठ खोलता है।
बैकग्राउंड स्क्रिप्ट को डिबग करने के लिए आप **एक्सटेंशन विवरण पर जा सकते हैं और सेवा कार्यकर्ता का निरीक्षण कर सकते हैं,** यह बैकग्राउंड स्क्रिप्ट के साथ डेवलपर टूल्स खोलेगा:
बैकग्राउंड स्क्रिप्ट को डिबग करने के लिए आप **एक्सटेंशन विवरण पर जा सकते हैं और सेवा कार्यकर्ता का निरीक्षण कर सकते हैं,** इससे बैकग्राउंड स्क्रिप्ट के साथ डेवलपर टूल्स खुलेंगे:
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
@ -269,7 +269,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
* **एक्शन पृष्ठ** तब प्रदर्शित होते हैं जब **एक्सटेंशन आइकन** पर क्लिक किया जाता है।
* पृष्ठ जो एक्सटेंशन **एक नए टैब में लोड करेगा**
* **विकल्प पृष्ठ**: यह पृष्ठ क्लिक करने पर एक्सटेंशन के शीर्ष पर प्रदर्शित होता है। पिछले मैनिफेस्ट में, मैं इस पृष्ठ तक `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` में पहुँचने में सक्षम था या क्लिक करके:
* **विकल्प पृष्ठ**: यह पृष्ठ क्लिक करने पर एक्सटेंशन के शीर्ष पर प्रदर्शित होता है। पिछले मैनिफेस्ट में, मैं इस पृष्ठ तक पहुँचने में सक्षम था `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` या क्लिक करके:
<figure><img src="../../.gitbook/assets/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
@ -280,7 +280,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
### `permissions` & `host_permissions`
**`permissions`** और **`host_permissions`** `manifest.json` से प्रविष्टियाँ हैं जो **यह संकेत करेंगी कि** ब्राउज़र एक्सटेंशन के पास **कौन सी अनुमतियाँ** हैं (स्टोरेज, स्थान...) और **कौन से वेब पृष्ठों** पर
**`permissions`** और **`host_permissions`** `manifest.json` से प्रविष्टियाँ हैं जो **यह संकेत करेंगी कि ब्राउज़र एक्सटेंशन के पास कौन सी अनुमतियाँ** हैं (स्टोरेज, स्थान...) और **कौन से वेब पृष्ठों में**।
चूंकि ब्राउज़र एक्सटेंशन इतने **विशिष्ट** हो सकते हैं, एक दुर्भावनापूर्ण या एक जो समझौता किया गया हो, हमलावर को **संवेदनशील जानकारी चुराने और उपयोगकर्ता पर जासूसी करने के लिए विभिन्न साधनों की अनुमति दे सकता है**
@ -298,7 +298,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
```bash
script-src 'self'; object-src 'self';
```
CSP और संभावित बायपास के बारे में अधिक जानकारी के लिए देखें:
अधिक जानकारी के लिए CSP और संभावित बायपास के बारे में देखें:
{% content-ref url="../content-security-policy-csp-bypass/" %}
[content-security-policy-csp-bypass](../content-security-policy-csp-bypass/)
@ -306,7 +306,7 @@ CSP और संभावित बायपास के बारे मे
### `web_accessible_resources`
किसी वेबपेज को ब्राउज़र एक्सटेंशन के एक पृष्ठ, जैसे कि `.html` पृष्ठ, तक पहुँचने के लिए, इस पृष्ठ को `manifest.json` के **`web_accessible_resources`** क्षेत्र में उल्लेखित होना चाहिए।\
किसी वेबपेज को ब्राउज़र एक्सटेंशन के एक पृष्ठ, जैसे कि एक `.html` पृष्ठ, तक पहुँचने के लिए, इस पृष्ठ को `manifest.json` के **`web_accessible_resources`** क्षेत्र में उल्लेखित होना चाहिए।\
उदाहरण के लिए:
```javascript
{
@ -335,10 +335,10 @@ In सार्वजनिक एक्सटेंशनों में **ext
हालांकि, यदि `manifest.json` पैरामीटर **`use_dynamic_url`** का उपयोग किया जाता है, तो यह **id गतिशील हो सकता है**
{% hint style="success" %}
ध्यान दें कि यहां एक पृष्ठ का उल्लेख होने पर भी, यह **ClickJacking के खिलाफ सुरक्षित** हो सकता है धन्यवाद **Content Security Policy** के। इसलिए, ClickJacking हमले की पुष्टि करने से पहले आपको इसे भी जांचना होगा (frame-ancestors अनुभाग)।
ध्यान दें कि यहां एक पृष्ठ का उल्लेख होने पर भी, यह **ClickJacking के खिलाफ सुरक्षित** हो सकता है धन्यवाद **Content Security Policy** के। इसलिए ClickJacking हमले की पुष्टि करने से पहले आपको इसे भी जांचना होगा (frame-ancestors अनुभाग)।
{% endhint %}
इन पृष्ठों तक पहुचने की अनुमति होने से ये पृष्ठ **संभावित रूप से कमजोर ClickJacking** बन जाते हैं:
इन पृष्ठों तक पहुचने की अनुमति होने से ये पृष्ठ **संभावित रूप से कमजोर ClickJacking** बन जाते हैं:
{% content-ref url="browext-clickjacking.md" %}
[browext-clickjacking.md](browext-clickjacking.md)
@ -351,7 +351,7 @@ In सार्वजनिक एक्सटेंशनों में **ext
{% hint style="danger" %}
ध्यान दें कि **`web_accessible_resources`** से पृष्ठ और एक्सटेंशन के अन्य पृष्ठ भी **पृष्ठभूमि स्क्रिप्ट से संपर्क करने में सक्षम** हैं। इसलिए यदि इनमें से कोई पृष्ठ **XSS** के लिए कमजोर है, तो यह एक बड़ी कमजोरी खोल सकता है।
इसके अलावा, ध्यान दें कि आप केवल **`web_accessible_resources`** में निर्दिष्ट पृष्ठों को iframes के अंदर खोल सकते हैं, लेकिन एक नए टैब से आप एक्सटेंशन ID जानकर एक्सटेंशन में किसी भी पृष्ठ तक पहुच सकते हैं। इसलिए, यदि एक XSS पाया जाता है जो समान पैरामीटर का दुरुपयोग करता है, तो इसका दुरुपयोग किया जा सकता है भले ही पृष्ठ **`web_accessible_resources`** में कॉन्फ़िगर न किया गया हो।
इसके अलावा, ध्यान दें कि आप केवल **`web_accessible_resources`** में निर्दिष्ट पृष्ठों को iframes के अंदर खोल सकते हैं, लेकिन एक नए टैब से आप एक्सटेंशन ID जानकर एक्सटेंशन में किसी भी पृष्ठ तक पहुच सकते हैं। इसलिए, यदि एक XSS पाया जाता है जो समान पैरामीटर का दुरुपयोग करता है, तो इसका दुरुपयोग किया जा सकता है भले ही पृष्ठ **`web_accessible_resources`** में कॉन्फ़िगर न किया गया हो।
{% endhint %}
### `externally_connectable`
@ -371,22 +371,22 @@ In सार्वजनिक एक्सटेंशनों में **ext
यहां निर्दिष्ट **कम एक्सटेंशन और URL** के साथ, **हमला सतह** **छोटी** होगी।
{% hint style="danger" %}
यदि एक वेब पृष्ठ **XSS या टेकओवर के लिए संवेदनशील** है और इसे **`externally_connectable`** में निर्दिष्ट किया गया है, तो एक हमलावर **पृष्ठभूमि स्क्रिप्ट को सीधे संदेश भेजने** में सक्षम होगा, पूरी तरह से कंटेंट स्क्रिप्ट और इसके CSP को बायपास करते हुए।
यदि एक वेब पृष्ठ **XSS या टेकओवर के लिए संवेदनशील** है और इसे **`externally_connectable`** में निर्दिष्ट किया गया है, तो एक हमलावर **पृष्ठभूमि स्क्रिप्ट** को सीधे **संदेश भेजने** में सक्षम होगा, पूरी तरह से कंटेंट स्क्रिप्ट और इसके CSP को बायपास करते हुए।
इसलिए, यह एक **बहुत शक्तिशाली बायपास** है।
इसके अलावा, यदि क्लाइंट एक रॉग एक्सटेंशन स्थापित करता है, तो भले ही इसे संवेदनशील एक्सटेंशन के साथ संवाद करने की अनुमति न हो, यह **एक अनुमत वेब पृष्ठ में XSS डेटा** इंजेक्ट कर सकता है या **`WebRequest`** या **`DeclarativeNetRequest`** APIs का दुरुपयोग कर सकता है ताकि लक्षित डोमेन पर अनुरोधों में हेरफेर किया जा सके, एक पृष्ठ के अनुरोध को **JavaScript फ़ाइल** के लिए बदल सके। (ध्यान दें कि लक्षित पृष्ठ पर CSP इन हमलों को रोक सकता है)। यह विचार [**इस लेख से आया है**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability)।
इसके अलावा, यदि क्लाइंट एक रॉग एक्सटेंशन स्थापित करता है, भले ही इसे संवेदनशील एक्सटेंशन के साथ संवाद करने की अनुमति न हो, यह **एक अनुमत वेब पृष्ठ में XSS डेटा** इंजेक्ट कर सकता है या **`WebRequest`** या **`DeclarativeNetRequest`** APIs का दुरुपयोग कर सकता है ताकि लक्षित डोमेन पर अनुरोधों में हेरफेर किया जा सके, एक पृष्ठ के अनुरोध को **JavaScript फ़ाइल** के लिए बदलते हुए। (ध्यान दें कि लक्षित पृष्ठ पर CSP इन हमलों को रोक सकता है)। यह विचार [**इस लेख से आया है**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability)।
{% endhint %}
## संचार सारांश
### एक्सटेंशन <--> वेब ऐप
कंटेंट स्क्रिप्ट और वेब पृष्ठ के बीच संवाद करने के लिए आमतौर पर पोस्ट संदेशों का उपयोग किया जाता है। इसलिए, वेब एप्लिकेशन में आपको आमतौर पर **`window.postMessage`** फ़ंक्शन के लिए कॉल मिलेंगे और कंटेंट स्क्रिप्ट में **`window.addEventListener`** जैसे श्रोता मिलेंगे। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि एक्सटेंशन **वेब एप्लिकेशन के साथ एक पोस्ट संदेश भेजकर भी संवाद कर सकता है** (और इसलिए वेब को इसकी अपेक्षा करनी चाहिए) या बस वेब को एक नया स्क्रिप्ट लोड करने के लिए मजबूर कर सकता है।
कंटेंट स्क्रिप्ट और वेब पृष्ठ के बीच संवाद करने के लिए आमतौर पर पोस्ट संदेशों का उपयोग किया जाता है। इसलिए, वेब एप्लिकेशन में आपको आमतौर पर **`window.postMessage`** फ़ंक्शन के लिए कॉल मिलेंगे और कंटेंट स्क्रिप्ट में **`window.addEventListener`** जैसे श्रोता मिलेंगे। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि एक्सटेंशन भी **एक पोस्ट संदेश भेजकर वेब एप्लिकेशन के साथ संवाद कर सकता है** (और इसलिए वेब को इसकी अपेक्षा करनी चाहिए) या बस वेब को एक नया स्क्रिप्ट लोड करने के लिए मजबूर कर सकता है।
### एक्सटेंशन के अंदर
आमतौर पर **`chrome.runtime.sendMessage`** फ़ंक्शन का उपयोग एक्सटेंशन के अंदर एक संदेश भेजने के लिए किया जाता है (आमतौर पर `background` स्क्रिप्ट द्वारा संभाला जाता है) और इसे प्राप्त करने और संभालने के लिए एक श्रोता घोषित किया जाता है जो **`chrome.runtime.onMessage.addListener`** को कॉल करता है।
आम तौर पर **`chrome.runtime.sendMessage`** फ़ंक्शन का उपयोग एक्सटेंशन के अंदर एक संदेश भेजने के लिए किया जाता है (आमतौर पर `background` स्क्रिप्ट द्वारा संभाला जाता है) और इसे प्राप्त करने और संभालने के लिए एक श्रोता घोषित किया जाता है जो **`chrome.runtime.onMessage.addListener`** को कॉल करता है।
यह **`chrome.runtime.connect()`** का उपयोग करके एक स्थायी कनेक्शन बनाने के लिए भी संभव है, इसके बजाय एकल संदेश भेजने के, इसे **संदेश भेजने** और **प्राप्त करने** के लिए उपयोग किया जा सकता है जैसे कि निम्नलिखित उदाहरण में:
@ -419,19 +419,31 @@ console.log("Content script received message from background script:", msg);
```
</details>
यह भी संभव है कि एक बैकग्राउंड स्क्रिप्ट से एक कंटेंट स्क्रिप्ट में संदेश भेजा जाए जो एक विशेष टैब में स्थित है, **`chrome.tabs.sendMessage`** को कॉल करके, जहाँ आपको संदेश भेजने के लिए **टैब का ID** निर्दिष्ट करने की आवश्यकता होगी।
यह भी संभव है कि एक बैकग्राउंड स्क्रिप्ट से एक कंटेंट स्क्रिप्ट को संदेश भेजा जाए जो एक विशेष टैब में स्थित है, **`chrome.tabs.sendMessage`** को कॉल करके, जहाँ आपको संदेश भेजने के लिए **टैब का ID** निर्दिष्ट करने की आवश्यकता होगी।
### अनुमति प्राप्त `externally_connectable` से एक्सटेंशन तक
`externally_connectable` कॉन्फ़िगरेशन में अनुमति प्राप्त **वेब ऐप्स और बाहरी ब्राउज़र एक्सटेंशन** अनुरोध भेज सकते हैं:
**वेब ऐप्स और बाहरी ब्राउज़र एक्सटेंशन जो `externally_connectable` कॉन्फ़िगरेशन में अनुमति प्राप्त हैं** अनुरोध भेज सकते हैं:
```javascript
chrome.runtime.sendMessage(extensionId, ...
```
जहा **extension ID** का उल्लेख करना आवश्यक है।
जहा **extension ID** का उल्लेख करना आवश्यक है।
### Native Messaging
यह संभव है कि बैकग्राउंड स्क्रिप्ट सिस्टम के अंदर बाइनरी के साथ संवाद करें, जो कि यदि इस संवाद को सही तरीके से सुरक्षित नहीं किया गया तो **महत्वपूर्ण कमजोरियों जैसे RCEs** के प्रति **प्रवण** हो सकते हैं। [इस पर बाद में अधिक](./#native-messaging)।
```javascript
chrome.runtime.sendNativeMessage(
'com.my_company.my_application',
{text: 'Hello'},
function (response) {
console.log('Received ' + response);
}
);
```
## Web **↔︎** Content Script Communication
जहां **content scripts** काम करते हैं और जहां होस्ट पृष्ठ मौजूद हैं, वे एक-दूसरे से **अलग** हैं, जो **अलगाव** सुनिश्चित करता है। इस अलगाव के बावजूद, दोनों के पास पृष्ठ के **Document Object Model (DOM)** के साथ बातचीत करने की क्षमता है, जो एक साझा संसाधन है। होस्ट पृष्ठ को **content script** के साथ संवाद करने के लिए, या अप्रत्यक्ष रूप से **content script** के माध्यम से **extension** के साथ संवाद करने के लिए, आवश्यक है कि वे दोनों पक्षों द्वारा सुलभ **DOM** का उपयोग करें जो संवाद चैनल के रूप में कार्य करता है।
जहा**content scripts** कार्य करते हैं और जहाँ होस्ट पृष्ठ मौजूद हैं, वे एक-दूसरे से **अलग** हैं, जो **अलगाव** सुनिश्चित करता है। इस अलगाव के बावजूद, दोनों के पास पृष्ठ के **Document Object Model (DOM)** के साथ बातचीत करने की क्षमता है, जो एक साझा संसाधन है। होस्ट पृष्ठ को **content script** के साथ संवाद करने के लिए, या अप्रत्यक्ष रूप से सामग्री स्क्रिप्ट के माध्यम से एक्सटेंशन के साथ, आवश्यक है कि वे दोनों पक्षों द्वारा सुलभ **DOM** का उपयोग करें जो संवाद चैनल के रूप में कार्य करता है।
### Post Messages
@ -490,7 +502,7 @@ window.postMessage(
यह "सटीक" संचार का एक तरीका नहीं है, लेकिन **वेब और सामग्री स्क्रिप्ट को वेब DOM तक पहुंच होगी**। इसलिए, यदि **सामग्री स्क्रिप्ट** इससे कुछ जानकारी पढ़ रही है, **वेब DOM पर भरोसा करते हुए**, तो वेब इस डेटा को **संशोधित कर सकता है** (क्योंकि वेब पर भरोसा नहीं किया जाना चाहिए, या क्योंकि वेब XSS के प्रति संवेदनशील है) और **सामग्री स्क्रिप्ट को समझौता कर सकता है**
आप एक **DOM आधारित XSS से एक ब्राउज़र एक्सटेंशन को समझौता करने का उदाहरण** भी यहाँ पा सकते हैं:
आप एक **DOM आधारित XSS से एक ब्राउज़र एक्सटेंशन को समझौता करने** का उदाहरण भी यहाँ पा सकते हैं:
{% content-ref url="browext-xss-example.md" %}
[browext-xss-example.md](browext-xss-example.md)
@ -498,7 +510,7 @@ window.postMessage(
## सामग्री स्क्रिप्ट **↔︎** बैकग्राउंड स्क्रिप्ट संचार
एक सामग्री स्क्रिप्ट [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **या** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) का उपयोग करके एक **एक बार JSON-सीरियलाइज़ेबल** संदेश भेज सकती है।
एक सामग्री स्क्रिप्ट [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **या** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) फ़ंक्शंस का उपयोग करके एक **एक बार JSON-सीरियलाइज़ेबल** संदेश भेज सकती है।
**प्रतिक्रिया** को संभालने के लिए, लौटाए गए **Promise** का उपयोग करें। हालांकि, पीछे की संगतता के लिए, आप अभी भी अंतिम तर्क के रूप में एक **कॉलबैक** पास कर सकते हैं।
@ -510,7 +522,7 @@ const response = await chrome.runtime.sendMessage({greeting: "hello"});
console.log(response);
})();
```
**एक्सटेंशन** से एक अनुरोध भेजना (आमतौर पर एक **बैकग्राउंड स्क्रिप्ट**)। चयनित टैब में सामग्री स्क्रिप्ट को संदेश भेजने का उदाहरण:
एक **extension** से अनुरोध भेजना (आमतौर पर एक **background script**)। चयनित टैब में सामग्री स्क्रिप्ट को संदेश भेजने का उदाहरण:
```javascript
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
(async () => {
@ -533,11 +545,50 @@ sendResponse({farewell: "goodbye"});
}
);
```
In the example highlighted, **`sendResponse()`** को समकालिक तरीके से निष्पादित किया गया था। `sendResponse()` के असमकालिक निष्पादन के लिए `onMessage` इवेंट हैंडलर को संशोधित करने के लिए, `return true;` को शामिल करना अनिवार्य है।
उदाहरण में हाइलाइट किया गया, **`sendResponse()`** को समकालिक तरीके से निष्पादित किया गया था। `sendResponse()` के असमकालिक निष्पादन के लिए `onMessage` इवेंट हैंडलर को संशोधित करने के लिए, `return true;` को शामिल करना अनिवार्य है।
एक महत्वपूर्ण विचार यह है कि उन परिदृश्यों में जहां कई पृष्ठ `onMessage` इवेंट प्राप्त करने के लिए सेट किए गए हैं, **विशिष्ट इवेंट के लिए `sendResponse()` निष्पादित करने वाला पहला पृष्ठ** ही प्रभावी रूप से प्रतिक्रिया देने में सक्षम होगा। उसी इवेंट के लिए किसी भी बाद की प्रतिक्रियाओं पर विचार नहीं किया जाएगा।
एक महत्वपूर्ण विचार यह है कि उन परिदृश्यों में जहां कई पृष्ठ `onMessage` इवेंट प्राप्त करने के लिए सेट किए गए हैं, **विशिष्ट इवेंट के लिए `sendResponse()`** निष्पादित करने वाला पहला पृष्ठ ही प्रभावी रूप से प्रतिक्रिया देने में सक्षम होगा। उसी इवेंट के लिए किसी भी बाद की प्रतिक्रियाओं पर विचार नहीं किया जाएगा।
नए एक्सटेंशन बनाते समय, वादों की ओर प्राथमिकता होनी चाहिए न कि कॉलबैक की। कॉलबैक के उपयोग के संबंध में, `sendResponse()` फ़ंक्शन केवल तभी मान्य माना जाता है जब इसे सीधे समकालिक संदर्भ में निष्पादित किया जाए, या यदि इवेंट हैंडलर असमकालिक संचालन को `true` लौटाकर इंगित करता है। यदि कोई भी हैंडलर `true` नहीं लौटाता है या यदि `sendResponse()` फ़ंक्शन मेमोरी से हटा दिया जाता है (गारबेज-कलेक्टेड), तो डिफ़ॉल्ट रूप से `sendMessage()` फ़ंक्शन से संबंधित कॉलबैक को ट्रिगर किया जाएगा।
नई एक्सटेंशन बनाते समय, वादों की ओर प्राथमिकता होनी चाहिए न कि कॉलबैक की। कॉलबैक के उपयोग के संबंध में, `sendResponse()` फ़ंक्शन केवल तभी मान्य माना जाता है जब इसे सीधे समकालिक संदर्भ में निष्पादित किया जाए, या यदि इवेंट हैंडलर `true` लौटाकर असमकालिक संचालन को इंगित करता है। यदि कोई भी हैंडलर `true` नहीं लौटाता है या यदि `sendResponse()` फ़ंक्शन मेमोरी से हटा दिया जाता है (गारबेज-कलेक्टेड), तो डिफ़ॉल्ट रूप से `sendMessage()` फ़ंक्शन से संबंधित कॉलबैक को ट्रिगर किया जाएगा।
## नेटीव मैसेजिंग
ब्राउज़र एक्सटेंशन **सिस्टम में बाइनरी के साथ stdin के माध्यम से संवाद** करने की अनुमति भी देते हैं। एप्लिकेशन को इस बात का संकेत देने वाला एक json स्थापित करना चाहिए जैसे:
```json
{
"name": "com.my_company.my_application",
"description": "My Application",
"path": "C:\\Program Files\\My Application\\chrome_native_messaging_host.exe",
"type": "stdio",
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
}
```
जहाँ `name` वह स्ट्रिंग है जो [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) या [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) को एप्लिकेशन के साथ संवाद करने के लिए ब्राउज़र एक्सटेंशन के बैकग्राउंड स्क्रिप्ट से पास किया जाता है। `path` बाइनरी का पथ है, केवल 1 मान्य `type` है जो stdio है (stdin और stdout का उपयोग करें) और `allowed_origins` उन एक्सटेंशनों को इंगित करता है जो इसे एक्सेस कर सकते हैं (और इसमें वाइल्डकार्ड नहीं हो सकता)।
Chrome/Chromium इस json को कुछ विंडोज रजिस्ट्री और macOS और Linux में कुछ पथों में खोजेगा (अधिक जानकारी के लिए [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) में देखें)।
{% hint style="success" %}
ब्राउज़र एक्सटेंशन को इस संचार का उपयोग करने के लिए `nativeMessaing` अनुमति घोषित करने की भी आवश्यकता है।
{% endhint %}
यहाँ एक बैकग्राउंड स्क्रिप्ट कोड है जो एक नेटिव एप्लिकेशन को संदेश भेजता है:
```javascript
chrome.runtime.sendNativeMessage(
'com.my_company.my_application',
{text: 'Hello'},
function (response) {
console.log('Received ' + response);
}
);
```
In [**इस ब्लॉग पोस्ट**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/) में एक कमजोर पैटर्न जो कि नेटिव मैसेजेस का दुरुपयोग करता है, प्रस्तावित किया गया है:
1. ब्राउज़र एक्सटेंशन के लिए कंटेंट स्क्रिप्ट के लिए एक वाइल्डकार्ड पैटर्न है।
2. कंटेंट स्क्रिप्ट `sendMessage` का उपयोग करके बैकग्राउंड स्क्रिप्ट को `postMessage` संदेश भेजता है।
3. बैकग्राउंड स्क्रिप्ट `sendNativeMessage` का उपयोग करके नेटिव एप्लिकेशन को संदेश भेजता है।
4. नेटिव एप्लिकेशन संदेश को खतरनाक तरीके से संभालता है, जिससे कोड निष्पादन होता है।
और इसके अंदर **किसी भी पृष्ठ से RCE तक जाने का एक उदाहरण एक ब्राउज़र एक्सटेंशन का दुरुपयोग करते हुए समझाया गया है**
## मेमोरी/कोड/क्लिपबोर्ड में संवेदनशील जानकारी
@ -547,11 +598,11 @@ In the example highlighted, **`sendResponse()`** को समकालिक
बेशक, **कोड में संवेदनशील जानकारी न डालें**, क्योंकि यह **सार्वजनिक** होगी।
ब्राउज़र से मेमोरी डंप करने के लिए आप **प्रोसेस मेमोरी को डंप** कर सकते हैं या ब्राउज़र एक्सटेंशन की **सेटिंग्स** में जाकर **`Inspect pop-up`** पर क्लिक करें -> **`Memory`** सेक्शन में -> **`Take a snapshot`** और संवेदनशील जानकारी के लिए स्नैपशॉट के अंदर खोजने के लिए **`CTRL+F`** दबाएं।
ब्राउज़र से मेमोरी को डंप करने के लिए आप **प्रोसेस मेमोरी को डंप** कर सकते हैं या ब्राउज़र एक्सटेंशन की **सेटिंग्स** में जाने के लिए **`Inspect pop-up`** पर क्लिक करें -> **`Memory`** सेक्शन में -> **`Take a snapshot`** और संवेदनशील जानकारी के लिए स्नैपशॉट के अंदर **`CTRL+F`** का उपयोग करें।
इसके अलावा, अत्यधिक संवेदनशील जानकारी जैसे म्नेमोनिक की या पासवर्ड **क्लिपबोर्ड में कॉपी करने की अनुमति नहीं दी जानी चाहिए** (या कम से कम इसे कुछ सेकंड में क्लिपबोर्ड से हटा दें) क्योंकि तब क्लिपबोर्ड की निगरानी करने वाली प्रक्रियाएँ उन्हें प्राप्त कर सकेंगी।
इसके अलावा, अत्यधिक संवेदनशील जानकारी जैसे म्नेमोनिक कीज़ या पासवर्ड **क्लिपबोर्ड में कॉपी करने की अनुमति नहीं दी जानी चाहिए** (या कम से कम इसे कुछ सेकंड में क्लिपबोर्ड से हटा दें) क्योंकि फिर क्लिपबोर्ड की निगरानी करने वाली प्रक्रियाएँ उन्हें प्राप्त कर सकेंगी।
## ब्राउज़र में एक्सटेंशन लोड करना
## ब्राउज़र में एक एक्सटेंशन लोड करना
1. **ब्राउज़र एक्सटेंशन डाउनलोड करें** और अनज़िप करें
2. **`chrome://extensions/`** पर जाएं और `Developer Mode` को **सक्रिय करें**
@ -561,11 +612,11 @@ In the example highlighted, **`sendResponse()`** को समकालिक
## स्टोर से स्रोत कोड प्राप्त करना
एक Chrome एक्सटेंशन का स्रोत कोड विभिन्न तरीकों से प्राप्त किया जा सकता है। नीचे प्रत्येक विकल्प के लिए विस्तृत स्पष्टीकरण और निर्देश दिए गए हैं।
एक क्रोम एक्सटेंशन का स्रोत कोड विभिन्न तरीकों से प्राप्त किया जा सकता है। नीचे प्रत्येक विकल्प के लिए विस्तृत स्पष्टीकरण और निर्देश दिए गए हैं।
### कमांड लाइन के माध्यम से ZIP के रूप में एक्सटेंशन डाउनलोड करें
Chrome एक्सटेंशन का स्रोत कोड कमांड लाइन का उपयोग करके ZIP फ़ाइल के रूप में डाउनलोड किया जा सकता है। इसमें एक विशिष्ट URL से ZIP फ़ाइल लाने के लिए `curl` का उपयोग करना और फिर ZIP फ़ाइल की सामग्री को एक निर्देशिका में निकालना शामिल है। यहाँ कदम हैं:
एक क्रोम एक्सटेंशन का स्रोत कोड कमांड लाइन का उपयोग करके ZIP फ़ाइल के रूप में डाउनलोड किया जा सकता है। इसमें एक विशिष्ट URL से ZIP फ़ाइल लाने के लिए `curl` का उपयोग करना और फिर ZIP फ़ाइल की सामग्री को एक निर्देशिका में निकालना शामिल है। यहाँ कदम हैं:
1. `"extension_id"` को एक्सटेंशन के वास्तविक ID से बदलें।
2. निम्नलिखित कमांड निष्पादित करें:
@ -580,19 +631,19 @@ unzip -d "$extension_id-source" "$extension_id.zip"
### CRX Viewer एक्सटेंशन का उपयोग करें
एक और सुविधाजनक विधि Chrome Extension Source Viewer का उपयोग करना है, जो एक ओपन-सोर्स प्रोजेक्ट है। इसे [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en) से स्थापित किया जा सकता है। व्यूअर का स्रोत कोड इसके [GitHub रिपॉजिटरी](https://github.com/Rob--W/crxviewer) में उपलब्ध है।
एक और सुविधाजनक विधि Chrome Extension Source Viewer का उपयोग करना है, जो एक ओपन-सोर्स प्रोजेक्ट है। इसे [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en) से स्थापित किया जा सकता है। व्यूअर का स्रोत कोड इसके [GitHub repository](https://github.com/Rob--W/crxviewer) में उपलब्ध है।
### स्थानीय रूप से स्थापित एक्सटेंशन का स्रोत देखें
स्थानीय रूप से स्थापित Chrome एक्सटेंशन को भी निरीक्षण किया जा सकता है। यहाँ यह कैसे करें:
1. `chrome://version/` पर जाकर अपने Chrome स्थानीय प्रोफ़ाइल निर्देशिका तक पहुँचें और "Profile Path" फ़ील्ड को खोजें।
2. प्रोफ़ाइल निर्देशिका के भीतर `Extensions/` उपफ़ोल्डर में जाएँ।
2. प्रोफ़ाइल निर्देशिका के भीतर `Extensions/` उपफ़ोल्डर पर जाएँ।
3. इस फ़ोल्डर में सभी स्थापित एक्सटेंशन होते हैं, आमतौर पर उनके स्रोत कोड के साथ एक पठनीय प्रारूप में।
एक्सटेंशन की पहचान करने के लिए, आप उनके IDs को नामों से मैप कर सकते हैं:
* `about:extensions` पृष्ठ पर डेवलपर मोड सक्षम करें ताकि प्रत्येक एक्सटेंशन के IDs देख सकें।
* प्रत्येक एक्सटेंशन के ID देखने के लिए `about:extensions` पृष्ठ पर डेवलपर मोड सक्षम करें।
* प्रत्येक एक्सटेंशन के फ़ोल्डर के भीतर, `manifest.json` फ़ाइल में एक पठनीय `name` फ़ील्ड होती है, जो आपको एक्सटेंशन की पहचान करने में मदद करती है।
### फ़ाइल आर्काइवर या अनपैकर का उपयोग करें
@ -601,56 +652,69 @@ Chrome Web Store पर जाएँ और एक्सटेंशन डा
### Chrome में डेवलपर मोड का उपयोग करें
Chrome खोलें और `chrome://extensions/` पर जाएँ। शीर्ष दाएँ कोने में "डेवलपर मोड" सक्षम करें। "लोड अनपैक्ड एक्सटेंशन..." पर क्लिक करें। अपने एक्सटेंशन के निर्देशिका में जाएँ। यह स्रोत कोड डाउनलोड नहीं करता है, लेकिन यह पहले से डाउनलोड या विकसित किए गए एक्सटेंशन के कोड को देखने और संशोधित करने के लिए उपयोगी है।
Chrome खोलें और `chrome://extensions/` पर जाएँ। शीर्ष दाएँ कोने में "डेवलपर मोड" सक्षम करें। "लोड अनपैक्ड एक्सटेंशन..." पर क्लिक करें। अपने एक्सटेंशन के निर्देशिका पर जाएँ। यह स्रोत कोड डाउनलोड नहीं करता है, लेकिन यह पहले से डाउनलोड किए गए या विकसित किए गए एक्सटेंशन के कोड को देखने और संशोधित करने के लिए उपयोगी है।
## Chrome एक्सटेंशन मैनिफेस्ट डेटासेट
कमजोर ब्राउज़र एक्सटेंशन को पहचानने के लिए आप [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) का उपयोग कर सकते हैं और संभावित कमजोर संकेतों के लिए उनके मैनिफेस्ट फ़ाइलों की जांच कर सकते हैं। उदाहरण के लिए, 25000 से अधिक उपयोगकर्ताओं वाले एक्सटेंशन, `content_scripts` और अनुमति `nativeMessaing` की जांच करने के लिए:
{% code overflow="wrap" %}
```bash
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
```
{% endcode %}
## सुरक्षा ऑडिट चेकलिस्ट
हालाँकि ब्राउज़र एक्सटेंशन का **सीमित हमले का क्षेत्र** है, उनमें से कुछ में **कमजोरियाँ** या **संभावित हार्डनिंग सुधार** हो सकते हैं। निम्नलिखित सबसे सामान्य हैं:
हालाकि ब्राउज़र एक्सटेंशन का **सीमित हमले का क्षेत्र**ोता है, उनमें से कुछ में **कमजोरियाँ** या **संभावित सख्ती में सुधार** हो सकते हैं। निम्नलिखित सबसे सामान्य हैं:
* [ ] **`permissions`** के लिए यथासंभव अनुरोधों को **सीमित** करें
* [ ] **`host_permissions`** को यथासंभव **सीमित** करें
* [ ] **`permissions`** के लिए अनुरोध की गई **सीमित** करें
* [ ] **`host_permissions`** के लिए अनुरोध की गई **सीमित** करें
* [ ] एक **मजबूत** **`content_security_policy`** का उपयोग करें
* [ ] **`externally_connectable`** को यथासंभव **सीमित** करें, यदि कोई आवश्यकता नहीं है और संभव है, तो इसे डिफ़ॉल्ट रूप से न छोड़ें, **`{}`** निर्दिष्ट करें
* [ ] यदि यहाँ **XSS या टेकओवर के लिए कमजोर URL** का उल्लेख किया गया है, तो एक हमलावर **पृष्ठभूमि स्क्रिप्ट को सीधे संदेश भेजने में सक्षम होगा**। बहुत शक्तिशाली बायपास।
* [ ] यदि यहा **XSS या टेकओवर के लिए कमजोर URL** का उल्लेख किया गया है, तो एक हमलावर **पृष्ठभूमि स्क्रिप्ट को सीधे संदेश भेजने** में सक्षम होगा। बहुत शक्तिशाली बायपास।
* [ ] **`web_accessible_resources`** को यथासंभव **सीमित** करें, यदि संभव हो तो खाली भी।
* [ ] यदि **`web_accessible_resources`** कोई नहीं है, तो [**ClickJacking**](browext-clickjacking.md) के लिए जाँच करें
* [ ] यदि कोई **संवाद** **एक्सटेंशन** से **वेब पृष्ठ** की ओर होता है, तो [**XSS**](browext-xss-example.md) **कमजोरियों** के लिए जाँच करें जो संवाद में उत्पन्न होती हैं।
* [ ] यदि पोस्ट संदेशों का उपयोग किया जाता है, तो [**पोस्ट संदेश कमजोरियों**](../postmessage-vulnerabilities/)** के लिए जाँच करें।**
* [ ] यदि **कंटेंट स्क्रिप्ट DOM विवरणों तक पहुँचती है**, तो जाँच करें कि वे **XSS** को **परिचयित** नहीं कर रही हैं यदि वे **संशोधित** हो जाती हैं
* [ ] यदि यह संवाद **कंटेंट स्क्रिप्ट -> पृष्ठभूमि स्क्रिप्ट संवाद** में भी शामिल है, तो विशेष जोर दें
* [ ] यदि **`web_accessible_resources`** कोई नहीं है, तो [**ClickJacking**](browext-clickjacking.md) के लिए जांचें
* [ ] यदि किसी भी **संचार** का होना **एक्सटेंशन** से **वेब पृष्ठ** की ओर होता है, तो [**XSS**](browext-xss-example.md) **कमजोरियों** के लिए जांचें जो संचार में उत्पन्न होती हैं।
* [ ] यदि पोस्ट संदेशों का उपयोग किया जाता है, तो [**पोस्ट संदेश कमजोरियों**](../postmessage-vulnerabilities/)** के लिए जांचें।**
* [ ] यदि **कंटेंट स्क्रिप्ट DOM विवरणों तक पहुंचती है**, तो जांचें कि वे **XSS** को **परिवर्तित** करने पर **परिचय नहीं कर रही हैं** यदि वे वेब द्वारा **संशोधित** की जाती हैं
* [ ] यदि यह संचार **कंटेंट स्क्रिप्ट -> पृष्ठभूमि स्क्रिप्ट संचार** में भी शामिल है, तो विशेष जोर दें
* [ ] यदि पृष्ठभूमि स्क्रिप्ट **नेटिव मैसेजिंग** के माध्यम से संचार कर रही है, तो जांचें कि संचार सुरक्षित और स्वच्छ है
* [ ] **संवेदनशील जानकारी को ब्राउज़र एक्सटेंशन के कोड के अंदर नहीं रखा जाना चाहिए**
* [ ] **संवेदनशील जानकारी को ब्राउज़र एक्सटेंशन की मेमोरी के अंदर नहीं रखा जाना चाहिए**
* [ ] **संवेदनशील जानकारी को बिना सुरक्षा के फ़ाइल प्रणाली के अंदर नहीं रखा जाना चाहिए**
## उपकरण
### [**Tarnish**](https://thehackerblog.com/tarnish/)
* किसी भी Chrome एक्सटेंशन को प्रदान किए गए Chrome वेबस्टोर लिंक से खींचता है।
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **व्यूअर**: बस एक्सटेंशन के मैनिफेस्ट का JSON-प्रेटिफाइड संस्करण प्रदर्शित करता है।
* **फिंगरप्रिंट विश्लेषण**: [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) का पता लगाना और Chrome एक्सटेंशन फिंगरप्रिंटिंग जावास्क्रिप्ट का स्वचालित निर्माण।
* **संभावित Clickjacking विश्लेषण**: एक्सटेंशन HTML पृष्ठों का पता लगाना जिनमें [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) निर्देश सेट है। ये पृष्ठों के उद्देश्य के आधार पर Clickjacking के लिए संभावित रूप से कमजोर हो सकते हैं।
* **अनुमति चेतावनी(ों) का व्यूअर**: जो सभी Chrome अनुमति प्रॉम्प्ट चेतावनियों की सूची दिखाता है जो उपयोगकर्ता द्वारा एक्सटेंशन स्थापित करने का प्रयास करते समय प्रदर्शित की जाएगी।
* **खतरनाक फ़ंक्शन(ों)**: खतरनाक फ़ंक्शन का स्थान दिखाता है जिसे संभावित रूप से एक हमलावर द्वारा शोषित किया जा सकता है (जैसे innerHTML, chrome.tabs.executeScript जैसे फ़ंक्शन)।
* **एंट्री पॉइंट(ों)**: दिखाता है कि एक्सटेंशन उपयोगकर्ता/बाहरी इनपुट को कहा लेता है। यह एक्सटेंशन के सतह क्षेत्र को समझने और एक्सटेंशन को दुर्भावनापूर्ण रूप से तैयार किए गए डेटा भेजने के संभावित बिंदुओं की तलाश करने के लिए उपयोगी है।
* खतरनाक फ़ंक्शन(ों) और एंट्री पॉइंट(ों) स्कैनर के लिए उनके उत्पन्न अलर्ट में निम्नलिखित शामिल हैं:
* किसी दिए गए क्रोम वेबस्टोर लिंक से कोई भी क्रोम एक्सटेंशन खींचता है।
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **दर्शक**: बस एक्सटेंशन के मैनिफेस्ट का JSON-प्रेटफाइड संस्करण प्रदर्शित करता है।
* **फिंगरप्रिंट विश्लेषण**: [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) का पता लगाना और क्रोम एक्सटेंशन फिंगरप्रिंटिंग जावास्क्रिप्ट का स्वचालित निर्माण।
* **संभावित क्लिकजैकिंग विश्लेषण**: एक्सटेंशन HTML पृष्ठों का पता लगाना जिनमें [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) निर्देश सेट है। ये पृष्ठों के उद्देश्य के आधार पर क्लिकजैकिंग के लिए संभावित रूप से कमजोर हो सकते हैं।
* **अनुमति चेतावनी दर्शक**: जो सभी क्रोम अनुमति प्रॉम्प्ट चेतावनियों की सूची दिखाता है जो उपयोगकर्ता द्वारा एक्सटेंशन स्थापित करने का प्रयास करते समय प्रदर्शित की जाएगी।
* **खतरनाक फ़ंक्शन**: खतरनाक फ़ंक्शनों का स्थान दिखाता है जिन्हें संभावित रूप से एक हमलावर द्वारा शोषित किया जा सकता है (जैसे, innerHTML, chrome.tabs.executeScript जैसे फ़ंक्शन)।
* **प्रवेश बिंदु**: दिखाता है कि एक्सटेंशन उपयोगकर्ता/बाहरी इनपुट को कहा लेता है। यह एक्सटेंशन के सतह क्षेत्र को समझने और एक्सटेंशन को दुर्भावनापूर्ण रूप से तैयार किए गए डेटा भेजने के संभावित बिंदुओं की तलाश करने के लिए उपयोगी है।
* खतरनाक फ़ंक्शन और प्रवेश बिंदु स्कैनर के लिए उनके उत्पन्न अलर्ट में निम्नलिखित शामिल हैं:
* अलर्ट का कारण बनने वाला प्रासंगिक कोड स्निपेट और पंक्ति।
* समस्या का विवरण।
* कोड वाल पूर्ण स्रोत फ़ाइल को देखने के लिए "View File" बटन।
* कोड वाल पूर्ण स्रोत फ़ाइल को देखने के लिए "View File" बटन।
* अलर्ट की गई फ़ाइल का पथ।
* अलर्ट की गई फ़ाइल का पूर्ण Chrome एक्सटेंशन URI।
* यह किस प्रकार की फ़ाइल है, जैसे पृष्ठभूमि पृष्ठ स्क्रिप्ट, सामग्री स्क्रिप्ट, ब्राउज़र क्रिया, आदि।
* यदि कमजोर पंक्ति एक जावास्क्रिप्ट फ़ाइल में है, तो यह उन सभी पृष्ठों के पथ दिखाता है जहा इसे शामिल किया गया है, साथ ही इन पृष्ठों का प्रकार और [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) स्थिति।
* **कंटेंट सुरक्षा नीति (CSP) विश्लेषक और बायपास चेक**: यह आपके एक्सटेंशन के CSP में कमजोरियों को उजागर करेगा और आपके CSP को बायपास करने के संभावित तरीकों को भी उजागर करेगा।
* **ज्ञात कमजोर पुस्तकालय**: यह ज्ञात-कमजोर जावास्क्रिप्ट पुस्तकालयों के किसी भी उपयोग की जाँच करने के लिए [Retire.js](https://retirejs.github.io/retire.js/) का उपयोग करता है।
* अलर्ट की गई फ़ाइल का पूर्ण क्रोम एक्सटेंशन URI।
* यह किस प्रकार की फ़ाइल है, जैसे कि पृष्ठभूमि पृष्ठ स्क्रिप्ट, सामग्री स्क्रिप्ट, ब्राउज़र क्रिया, आदि।
* यदि कमजोर पंक्ति एक जावास्क्रिप्ट फ़ाइल में है, तो यह उन सभी पृष्ठों के पथ दिखाता है जहा इसे शामिल किया गया है, साथ ही इन पृष्ठों का प्रकार और [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) स्थिति।
* **कंटेंट सुरक्षा नीति (CSP) विश्लेषक और बायपास चेक**: यह आपके एक्सटेंशन के CSP में कमजोरियों को उजागर करेगा और आपके CSP को बायपास करने के संभावित तरीकों को भी उजागर करेगा, जैसे कि व्हाइटलिस्टेड CDNs आदि
* **ज्ञात कमजोर पुस्तकालय**: यह ज्ञात-कमजोर जावास्क्रिप्ट पुस्तकालयों के किसी भी उपयोग की जांच के लिए [Retire.js](https://retirejs.github.io/retire.js/) का उपयोग करता है।
* एक्सटेंशन और स्वरूपित संस्करण डाउनलोड करें।
* मूल एक्सटेंशन डाउनलोड करें।
* एक्सटेंशन का एक सुंदर संस्करण डाउनलोड करें (स्वचालित रूप से प्रेटिफाइड HTML और जावास्क्रिप्ट)।
* स्कैन परिणामों का स्वचालित कैशिंग, एक एक्सटेंशन स्कैन चलाने में पहले बार में अच्छा समय लगेगा। हालाँकि दूसरी बार, यदि एक्सटेंशन को अपडेट नहीं किया गया है, तो परिणाम कैश होने के कारण लगभग तात्कालिक होगा।
* एक्सटेंशन का एक सुंदर संस्करण डाउनलोड करें (स्वचालित रूप से प्रेटफाइड HTML और जावास्क्रिप्ट)।
* स्कैन परिणामों का स्वचालित कैशिंग, एक एक्सटेंशन स्कैन चलाने में पहले बार में अच्छा समय लगेगा। हालाँकि, दूसरी बार, यह मानते हुए कि एक्सटेंशन को अपडेट नहीं किया गया है, परिणामों के कैश होने के कारण लगभग तात्कालिक होगा।
* लिंक करने योग्य रिपोर्ट URLs, किसी और को tarnish द्वारा उत्पन्न एक्सटेंशन रिपोर्ट से आसानी से लिंक करें।
### [Neto](https://github.com/elevenpaths/neto)
प्रोजेक्ट Neto एक Python 3 पैकेज है जिसे ब्राउज़र प्लगइन्स और एक्सटेंशनों की छिपी सुविधाओं का विश्लेषण और अनरवेल करने के लिए तैयार किया गया है, जैसे कि Firefox और Chrome। यह पैकेज फ़ाइलों को अनज़िप करने की प्रक्रिया को स्वचालित करता है ताकि `manifest.json`, स्थानीयकरण फ़ोल्डर या जावास्क्रिप्ट और HTML स्रोत फ़ाइलों में प्रासंगिक संसाधनों से इन सुविधाओं को निकाला जा सके।
प्रोजेक्ट Neto एक Python 3 पैकेज है जिसे फ़ायरफ़ॉक्स और क्रोम जैसे प्रसिद्ध ब्राउज़रों के लिए ब्राउज़र प्लगइन्स और एक्सटेंशनों की छिपी हुई विशेषताओं का विश्लेषण और अनावरण करने के लिए तैयार किया गया है। यह पैकेज की गई फ़ाइलों को अनज़िप करने की प्रक्रिया को स्वचालित करता है ताकि इन विशेषताओं को एक्सटेंशन में प्रासंगिक संसाधनों जैसे `manifest.json`, स्थानीयकरण फ़ोल्डरों या जावास्क्रिप्ट और HTML स्रोत फ़ाइलों से निकाला जा सके।
## संदर्भ
@ -666,16 +730,16 @@ Chrome खोलें और `chrome://extensions/` पर जाएँ। श
* [https://gist.github.com/LongJohnCoder/9ddf5735df3a4f2e9559665fb864eac0](https://gist.github.com/LongJohnCoder/9ddf5735df3a4f2e9559665fb864eac0)
{% hint style="success" %}
AWS हैकिंग सीखें और अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP हैकिंग सीखें और अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks का समर्थन करें</summary>
<summary>Support HackTricks</summary>
* [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
* **💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **Twitter** पर हमें **फॉलो करें** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **हैकिंग ट्रिक्स साझा करें, PRs को [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपॉजिटरी में सबमिट करके।**
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}