mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 22:20:43 +00:00
Translated ['pentesting-web/browser-extension-pentesting-methodology/REA
This commit is contained in:
parent
00c8aa9e16
commit
5579c48867
1 changed files with 139 additions and 78 deletions
|
@ -16,7 +16,7 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
## Basiese Inligting
|
||||
|
||||
Webblaaier-uitbreidings is geskryf in JavaScript en word deur die blaaier in die agtergrond gelaai. Dit het sy [DOM](https://www.w3schools.com/js/js\_htmldom.asp) maar kan met ander webwerwe se DOMs interaksie hê. Dit beteken dat dit ander webwerwe se vertroulikheid, integriteit, en beskikbaarheid (CIA) kan kompromiteer.
|
||||
Webblaaier-uitbreidings word geskryf in JavaScript en gelaai deur die blaaier in die agtergrond. Dit het sy [DOM](https://www.w3schools.com/js/js\_htmldom.asp) maar kan met ander webwerwe se DOMs interaksie hê. Dit beteken dat dit ander webwerwe se vertroulikheid, integriteit, en beskikbaarheid (CIA) kan kompromiteer.
|
||||
|
||||
## Hoofkomponente
|
||||
|
||||
|
@ -34,7 +34,7 @@ Die uitbreidingskern bevat die meeste van die uitbreidingspriveleges/toegang, ma
|
|||
|
||||
### **Inheemse Binêre**
|
||||
|
||||
Die uitbreiding maak 'n inheemse binêre moontlik wat **toegang tot die gasrekenaar met die gebruiker se volle regte kan verkry.** Die inheemse binêre interaksie met die uitbreidingskern deur die standaard Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) wat deur Flash en ander blaaier-inproppe gebruik word.
|
||||
Die uitbreiding maak 'n inheemse binêre moontlik wat die gasrekenaar kan **bereik met die gebruiker se volle regte.** Die inheemse binêre interaksioneer met die uitbreidingskern deur die standaard Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) wat deur Flash en ander blaaier-invoegtoepassings gebruik word.
|
||||
|
||||
### Grense
|
||||
|
||||
|
@ -42,9 +42,9 @@ Die uitbreiding maak 'n inheemse binêre moontlik wat **toegang tot die gasreken
|
|||
Om die gebruiker se volle regte te verkry, moet 'n aanvaller die uitbreiding oortuig om skadelike insette van die inhoudskrip na die uitbreidingskern en van die uitbreidingskern na die inheemse binêre oor te dra.
|
||||
{% endhint %}
|
||||
|
||||
Elke komponent van die uitbreiding is van mekaar geskei deur **sterk beskermende grense**. Elke komponent loop in 'n **afsonderlike bedryfstelselproses**. Inhoudskripte en uitbreidingskerns loop in **sandbox-prosesse** wat nie beskikbaar is vir die meeste bedryfstelseldienste nie.
|
||||
Elke komponent van die uitbreiding is van mekaar geskei deur **sterk beskermende grense**. Elke komponent loop in 'n **afsonderlike bedryfstelselproses**. Inhoudskripte en uitbreidingskerns loop in **sandbox prosesse** wat nie beskikbaar is vir die meeste bedryfstelseldienste nie.
|
||||
|
||||
Verder, inhoudskripte is geskei van hul geassosieerde webbladsye deur in 'n afsonderlike JavaScript-heap te loop. Die inhoudskrip en webbladsy het **toegang tot dieselfde onderliggende DOM**, maar die twee **ruil nooit JavaScript-aanwysers uit**, wat die lekkasie van JavaScript-funksionaliteit voorkom.
|
||||
Verder, inhoudskripte is geskei van hul geassosieerde webbladsye deur in 'n afsonderlike JavaScript-heap te loop. Die inhoudskrip en webbladsy het **toegang tot dieselfde onderliggende DOM**, maar die twee **ruil nooit JavaScript-aanwysers nie**, wat die lekkasie van JavaScript-funksionaliteit voorkom.
|
||||
|
||||
## **`manifest.json`**
|
||||
|
||||
|
@ -83,7 +83,7 @@ Voorbeeld:
|
|||
```
|
||||
### `content_scripts`
|
||||
|
||||
Inhoudskripte word **gelaai** telkens wanneer die gebruiker **navigeer na 'n ooreenstemmende bladsy**, in ons geval enige bladsy wat ooreenstem met die **`https://example.com/*`** uitdrukking en nie ooreenstem met die **`*://*/*/business*`** regex nie. Hulle voer uit **soos die bladsy se eie skripte** en het arbitrêre toegang tot die bladsy se [Dokument-voorwerpmodel (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model).
|
||||
Inhoudskripte word **gelaai** telkens wanneer die gebruiker na 'n ooreenstemmende bladsy **navigeer**, in ons geval enige bladsy wat ooreenstem met die **`https://example.com/*`** uitdrukking en nie ooreenstem met die **`*://*/*/business*`** regex nie. Hulle voer uit **soos die bladsy se eie skripte** en het willekeurige toegang tot die bladsy se [Dokument-voorwerpmodel (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model).
|
||||
```json
|
||||
"content_scripts": [
|
||||
{
|
||||
|
@ -100,7 +100,7 @@ Inhoudskripte word **gelaai** telkens wanneer die gebruiker **navigeer na 'n oor
|
|||
```
|
||||
Om meer URL's in te sluit of uit te sluit, is dit ook moontlik om **`include_globs`** en **`exclude_globs`** te gebruik.
|
||||
|
||||
Dit is 'n voorbeeld inhoudskrip wat 'n verduidelik-knoppie by die bladsy sal voeg wanneer [die stoor-API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) gebruik word om die `message`-waarde uit die uitbreiding se stoor te haal.
|
||||
Dit is 'n voorbeeld inhoudskrip wat 'n verduidelik-knoppie by die bladsy sal voeg wanneer [die stoor API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) gebruik word om die `message` waarde uit die uitbreiding se stoor te haal.
|
||||
```js
|
||||
chrome.storage.local.get("message", result =>
|
||||
{
|
||||
|
@ -115,24 +115,24 @@ document.body.appendChild(div);
|
|||
```
|
||||
<figure><img src="../../.gitbook/assets/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
'n Boodskap word na die uitbreidingsbladsye gestuur deur die inhoudskrip wanneer hierdie knoppie geklik word, deur die gebruik van die [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Dit is as gevolg van die beperking van die inhoudskrip in direkte toegang tot API's, met `storage` wat een van die min uitsonderings is. Vir funksionaliteite buite hierdie uitsonderings word boodskappe na uitbreidingsbladsye gestuur waarmee inhoudskripte kan kommunikeer.
|
||||
'n Boodskap word na die uitbreidingsbladsye gestuur deur die inhoudskrip wanneer hierdie knoppie geklik word, deur die gebruik van die [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Dit is as gevolg van die beperking van die inhoudskrip in direkte toegang tot API's, met `storage` wat een van die min uitsonderings is. Vir funksionaliteite buite hierdie uitsonderings word boodskappe gestuur na uitbreidingsbladsye waarmee inhoudskripte kan kommunikeer.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Afhanklik van die webblaaier, kan die vermoëns van die inhoudskrip effens verskil. Vir Chromium-gebaseerde webblaaier is die vermoënslys beskikbaar in die [Chrome-ontwikkelaarsdokumentasie](https://developer.chrome.com/docs/extensions/mv3/content\_scripts/#capabilities), en vir Firefox dien die [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content\_scripts#webextension\_apis) as die primêre bron.\
|
||||
Dit is ook noemenswaardig dat inhoudskripte die vermoë het om met agtergrondskripte te kommunikeer, wat hulle in staat stel om aksies uit te voer en terugvoer terug te stuur.
|
||||
{% endhint %}
|
||||
|
||||
Vir die sien en foutopsporing van inhoudskripte in Chrome, kan die Chrome-ontwikkelaarshulpmiddels vanuit Options > More tools > Developer tools geopen word OF deur Ctrl + Shift + I te druk.
|
||||
Vir die sien en foutopsporing van inhoudskripte in Chrome, kan die Chrome-ontwikkelaarshulpmiddelsmenu vanaf Options > More tools > Developer tools OF deur Ctrl + Shift + I te druk, geopen word.
|
||||
|
||||
Wanneer die ontwikkelaarshulpmiddels vertoon word, moet die **Source tab** geklik word, gevolg deur die **Content Scripts**-tabblad. Dit maak dit moontlik om hardlopende inhoudskripte van verskeie uitbreidings te beskou en breekpunte in te stel om die uitvoervloei te volg.
|
||||
Wanneer die ontwikkelaarshulpmiddels vertoon word, moet die **Source tab** geklik word, gevolg deur die **Content Scripts**-tabblad. Dit maak dit moontlik om die uitvoering van inhoudskripte van verskeie uitbreidings waar te neem en breekpunte in te stel om die uitvoervloei te volg.
|
||||
|
||||
### Geïnjecteerde inhoudskripte
|
||||
### Geïnspireerde inhoudskripte
|
||||
|
||||
{% hint style="success" %}
|
||||
Let daarop dat **Inhoudskripte nie verpligtend is** nie aangesien dit ook moontlik is om skripte **dinamies in te spuit** en om hulle **programmaties in te spuit** in webbladsye via **`tabs.executeScript`**. Dit bied eintlik meer **fynbeheer**.
|
||||
Let daarop dat **Inhoudskripte nie verpligtend is** nie, aangesien dit ook moontlik is om skripte **dinamies in te spuit** en om hulle **programmaties in te spuit** in webbladsye via **`tabs.executeScript`**. Dit bied eintlik meer **fynbeheer kontroles**.
|
||||
{% endhint %}
|
||||
|
||||
Vir die programmatiese inspuiting van 'n inhoudskrip, word daar van die uitbreiding vereis om [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) vir die bladsy waarin die skripte ingespuit moet word, te hê. Hierdie toestemmings kan óf verkry word deur hulle binne die manifest van die uitbreiding aan te vra óf op 'n tydelike basis deur [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
|
||||
Vir die programmatiese inspuiting van 'n inhoudskrip, moet die uitbreiding [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) vir die bladsy hê waarin die skripte ingespuit moet word. Hierdie toestemmings kan óf verkry word deur hulle aan te vra binne die manifest van die uitbreiding óf op 'n tydelike basis deur [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
|
||||
|
||||
#### Voorbeeld van 'n activeTab-gebaseerde uitbreiding
|
||||
|
||||
|
@ -182,7 +182,7 @@ func : injectedFunction,
|
|||
});
|
||||
});
|
||||
```
|
||||
#### Voorbeeld met skripsie-toestemmings
|
||||
#### Voorbeeld met skryfregte van skrips
|
||||
```javascript
|
||||
// service-workser.js
|
||||
chrome.scripting.registerContentScripts([{
|
||||
|
@ -236,13 +236,13 @@ js : [ "contentScript.js" ],
|
|||
```
|
||||
### `agtergrond`
|
||||
|
||||
Boodskappe wat deur inhoudskripte gestuur word, word ontvang deur die **agtergrondbladsy**, wat 'n sentrale rol speel in die koördinering van die uitbreiding se komponente. Veral, die agtergrondbladsy volhard oor die uitbreiding se leeftyd, wat diskreet opereer sonder direkte gebruikerinteraksie. Dit besit sy eie Dokument-Objekmodel (DOM), wat komplekse interaksies en toestandsbestuur moontlik maak.
|
||||
Boodskappe wat deur inhoudskripte gestuur word, word ontvang deur die **agtergrondbladsy**, wat 'n sentrale rol speel in die koördinering van die uitbreiding se komponente. Veral, die agtergrondbladsy volhard oor die uitbreiding se leeftyd, wat diskreet funksioneer sonder direkte gebruikerinteraksie. Dit besit sy eie Dokumentobjekmodel (DOM), wat komplekse interaksies en toestandsbestuur moontlik maak.
|
||||
|
||||
**Kernpunte**:
|
||||
|
||||
* **Agtergrondbladsy Rol:** Tree op as die senuweesentrum vir die uitbreiding, wat kommunikasie en koördinasie tussen verskeie dele van die uitbreiding verseker.
|
||||
* **Agtergrondbladsyrol:** Tree op as die senuweesentrum vir die uitbreiding, wat kommunikasie en koördinasie tussen verskeie dele van die uitbreiding verseker.
|
||||
* **Volharding:** Dit is 'n altyd teenwoordige entiteit, onsigbaar vir die gebruiker maar integraal tot die uitbreiding se funksionaliteit.
|
||||
* **Outomatiese Generering:** As nie uitdruklik gedefinieer nie, sal die blaaier outomaties 'n agtergrondbladsy skep. Hierdie outomaties gegenereerde bladsy sal al die agtergrondskripte wat gespesifiseer is in die uitbreiding se manifest insluit, wat verseker dat die naatlose werking van die uitbreiding se agtergrondtake gewaarborg word.
|
||||
* **Outomatiese Generering:** Indien nie uitdruklik gedefinieer nie, sal die blaaier outomaties 'n agtergrondbladsy skep. Hierdie outomaties gegenereerde bladsy sal al die agtergrondskripte wat in die uitbreiding se manifest gespesifiseer is, insluit, wat die naatlose werking van die uitbreiding se agtergrondtake verseker.
|
||||
|
||||
{% hint style="success" %}
|
||||
Die gerief wat deur die blaaier gebied word deur outomaties 'n agtergrondbladsy te genereer (wanneer nie uitdruklik verklaar nie) verseker dat alle nodige agtergrondskripte geïntegreer en operasioneel is, wat die opstelproses van die uitbreiding stroomlyn.
|
||||
|
@ -260,7 +260,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
|
|||
```
|
||||
Dit gebruik die [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) om boodskappe te luister. Wanneer 'n `"verduidelik"` boodskap ontvang word, gebruik dit die [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) om 'n bladsy in 'n nuwe oortjie te open.
|
||||
|
||||
Om die agtergrondskrip te foutopspoor, kan jy na die **uitbreidingsbesonderhede gaan en die dienswerker inspekteer,** dit sal die ontwikkelaarshulpmiddels met die agtergrondskrip oopmaak:
|
||||
Om die agtergrondskrip te foutsoek, kan jy na die **uitbreidingsbesonderhede gaan en die dienswerker inspekteer,** dit sal die ontwikkelaarshulpmiddels met die agtergrondskrip oopmaak:
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -268,22 +268,22 @@ Om die agtergrondskrip te foutopspoor, kan jy na die **uitbreidingsbesonderhede
|
|||
|
||||
Blaaieruitbreidings kan verskeie soorte bladsye bevat:
|
||||
|
||||
* **Aksiebladsye** word in 'n **afrollys vertoon wanneer die uitbreidingsikoon** geklik word.
|
||||
* **Aksiebladsye** word vertoon in 'n **afrollys wanneer die uitbreidingsikoon** geklik word.
|
||||
* Bladsye wat die uitbreiding sal **laai in 'n nuwe oortjie**.
|
||||
* **Opsiebladsye**: Hierdie bladsy word bo-op die uitbreiding vertoon wanneer dit geklik word. In die vorige manifest In my geval kon ek toegang tot hierdie bladsy kry in `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` of deur te klik:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Let daarop dat hierdie bladsye nie volhardend is soos agtergrondbladsye nie aangesien hulle dinamies inhoud laai wanneer nodig. Ten spyte hiervan deel hulle sekere vermoëns met die agtergrondbladsy:
|
||||
Let daarop dat hierdie bladsye nie aanhoudend is soos agtergrondbladsye nie aangesien hulle dinamies inhoud laai wanneer nodig. Ten spyte hiervan deel hulle sekere vermoëns met die agtergrondbladsy:
|
||||
|
||||
* **Kommunikasie met Inhoudskripte:** Soortgelyk aan die agtergrondbladsy kan hierdie bladsye boodskappe van inhoudskripte ontvang, wat interaksie binne die uitbreiding fasiliteer.
|
||||
* **Toegang tot Uitbreidingspesifieke API's:** Hierdie bladsye geniet omvattende toegang tot uitbreidingspesifieke API's, onderhewig aan die toestemmings wat vir die uitbreiding gedefinieer is.
|
||||
* **Toegang tot Uitbreiding-Spesifieke API's:** Hierdie bladsye geniet omvattende toegang tot uitbreiding-spesifieke API's, onderhewig aan die toestemmings wat vir die uitbreiding gedefinieer is.
|
||||
|
||||
### `permissions` & `host_permissions`
|
||||
|
||||
**`permissions`** en **`host_permissions`** is inskrywings van die `manifest.json` wat sal aandui **watter toestemmings** die blaaieruitbreidings het (berging, ligging...) en in **watter webbladsye**.
|
||||
|
||||
Aangesien blaaieruitbreidings so **bevoorreg** kan wees, kan 'n skadelike een of een wat gekompromitteer is, die aanvaller **verskillende maniere bied om sensitiewe inligting te steel en die gebruiker te bespioneer**.
|
||||
Aangesien blaaieruitbreidings so **bevoorreg** kan wees, kan 'n skadelike een of een wat gekompromitteer is, die aanvaller verskillende maniere bied om sensitiewe inligting te steel en die gebruiker te bespioneer.
|
||||
|
||||
Kyk hoe hierdie instellings werk en hoe hulle misbruik kan word in:
|
||||
|
||||
|
@ -335,29 +335,39 @@ In openbare uitbreidings is die **uitbreidings-ID toeganklik**:
|
|||
|
||||
Alhoewel, as die `manifest.json` parameter **`use_dynamic_url`** gebruik word, kan hierdie **id dinamies wees**.
|
||||
|
||||
Om toegang tot hierdie bladsye te hê, maak hierdie bladsye **potensieel vatbaar vir ClickJacking**:
|
||||
{% hint style="success" %}
|
||||
Let daarop dat selfs al word 'n bladsy hier genoem, dit dalk teen **ClickJacking** beskerm is danksy die **Content Security Policy**. Jy moet dit ook nagaan (frame-ancestors afdeling) voordat jy 'n ClickJacking-aanval moontlik bevestig.
|
||||
{% endhint %}
|
||||
|
||||
Om toegang tot hierdie bladsye toe te laat, maak hierdie bladsye **potensieel vatbaar vir ClickJacking**:
|
||||
|
||||
{% content-ref url="browext-clickjacking.md" %}
|
||||
[browext-clickjacking.md](browext-clickjacking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Om te voorkom dat hierdie bladsye slegs deur die uitbreiding gelaai word en nie deur lukrake URL's nie, kan ClickJacking-aanvalle voorkom word.
|
||||
Om hierdie bladsye slegs deur die uitbreiding te laat laai en nie deur lukrake URL's nie, kan ClickJacking-aanvalle voorkom.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Let daarop dat die bladsye van **`web_accessible_resources`** en ander bladsye van die uitbreiding ook in staat is om **agtergrondskripte te kontak**. As een van hierdie bladsye vatbaar is vir **XSS** kan dit 'n groter kwesbaarheid oopmaak.
|
||||
|
||||
Verder, let daarop dat jy slegs bladsye wat in **`web_accessible_resources`** aangedui is binne iframes kan oopmaak, maar van 'n nuwe lêer is dit moontlik om enige bladsy in die uitbreiding te bereik deur die uitbreidings-ID te ken. Daarom, as 'n XSS gevind word wat dieselfde parameters misbruik, kan dit selfs misbruik word as die bladsy nie in **`web_accessible_resources`** geconfigureer is nie.
|
||||
{% endhint %}
|
||||
|
||||
### `externally_connectable`
|
||||
|
||||
Volgens die [**dokumentasie**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), verklaar die `"externally_connectable"` manifest-eienskap **watter uitbreidings en webbladsye kan koppel** aan jou uitbreiding via [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) en [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
|
||||
|
||||
* As die **`externally_connectable`** sleutel **nie** verklaar word in jou uitbreiding se manifest nie of as dit verklaar word as **`"ids": ["*"]`**, **kan alle uitbreidings koppel, maar geen webbladsye kan koppel**.
|
||||
* As **spesifieke ID's gespesifiseer word**, soos in `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **kan slegs daardie aansoeke koppel**.
|
||||
* As die **`externally_connectable`** sleutel **nie** verklaar word in jou uitbreiding se manifest of as dit verklaar word as **`"ids": ["*"]`**, **kan alle uitbreidings koppel, maar geen webbladsye kan koppel**.
|
||||
* As **spesifieke ID's gespesifiseer word**, soos in `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **kan slegs daardie aansoeke** koppel.
|
||||
* As **passings** gespesifiseer word, sal daardie webtoepassings kan koppel:
|
||||
```json
|
||||
"matches": [
|
||||
"https://*.google.com/*",
|
||||
"*://*.chromium.org/*",
|
||||
```
|
||||
* Indien dit as leeg gespesifiseer word: **`"externally_connectable": {}`**, sal geen app of web kan koppel nie.
|
||||
* Indien dit as leeg gespesifiseer is: **`"externally_connectable": {}`**, sal geen app of web kan koppel nie.
|
||||
|
||||
Hoe minder uitbreidings en URL's hier aangedui word, hoe kleiner sal die aanvalsoppervlak wees.
|
||||
|
||||
|
@ -366,19 +376,69 @@ As 'n webbladsy vatbaar vir XSS of oorneembaarheid aangedui word in **`externall
|
|||
|
||||
Dit is dus 'n baie kragtige omseiling.
|
||||
|
||||
Verder, as die klient 'n skelm uitbreiding installeer, selfs al word dit nie toegelaat om met die vatbare uitbreiding te kommunikeer nie, kan dit XSS-data inspuit op 'n toegelate webbladsy of **`WebRequest`** of **`DeclarativeNetRequest`** API's misbruik om versoek op 'n geteikenede domein te manipuleer deur 'n versoek vir 'n **JavaScript-lêer** te verander. (Let wel dat CSP op die geteikende bladsy hierdie aanvalle kan voorkom). Hierdie idee kom [**van hierdie skryfstuk**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
|
||||
Verder, as die klient 'n skelm uitbreiding installeer, selfs al word dit nie toegelaat om met die vatbare uitbreiding te kommunikeer nie, kan dit XSS-data inspuit op 'n toegelate webbladsy of **`WebRequest`** of **`DeclarativeNetRequest`** API's misbruik om versoek op 'n geteikenede domein te manipuleer deur 'n versoek vir 'n **JavaScript-lêer** te verander. (Let wel dat CSP op die geteikende bladsy hierdie aanvalle kan voorkom). Hierdie idee kom [**van hierdie skrywe**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
|
||||
{% endhint %}
|
||||
|
||||
##
|
||||
## Kommunikasie opsomming
|
||||
|
||||
### Uitbreiding <--> Webtoep
|
||||
|
||||
Om tussen die inhoudskrip en die webbladsy te kommunikeer, word gewoonlik boodskappe gebruik. Daarom sal jy gewoonlik oproepe na die funksie **`window.postMessage`** in die webtoepassing vind en in die inhoudskrip luisteraars soos **`window.addEventListener`**. Let egter daarop dat die uitbreiding ook met die webtoep kan **kommunikeer deur 'n Posboodskap te stuur** (en daarom moet die web dit verwag) of net die web 'n nuwe lêer laat laai.
|
||||
|
||||
### Binne die uitbreiding
|
||||
|
||||
Gewoonlik word die funksie **`chrome.runtime.sendMessage`** gebruik om 'n boodskap binne die uitbreiding te stuur (gewoonlik hanteer deur die `agtergrond`-skrip) en om dit te ontvang en hanteer, word 'n luisteraar verklaar wat **`chrome.runtime.onMessage.addListener`** aanroep.
|
||||
|
||||
Dit is ook moontlik om **`chrome.runtime.connect()`** te gebruik om 'n volgehoue verbinding te hê in plaas van enkel boodskappe te stuur, dit is moontlik om dit te gebruik om **boodskappe** te **stuur** en **ontvang** soos in die volgende voorbeeld:
|
||||
|
||||
<details>
|
||||
|
||||
<summary><code>chrome.runtime.connect()</code> voorbeeld</summary>
|
||||
```javascript
|
||||
var port = chrome.runtime.connect();
|
||||
|
||||
// Listen for messages from the web page
|
||||
window.addEventListener("message", (event) => {
|
||||
// Only accept messages from the same window
|
||||
if (event.source !== window) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the message type is "FROM_PAGE"
|
||||
if (event.data.type && (event.data.type === "FROM_PAGE")) {
|
||||
console.log("Content script received: " + event.data.text);
|
||||
// Forward the message to the background script
|
||||
port.postMessage({ type: 'FROM_PAGE', text: event.data.text });
|
||||
}
|
||||
}, false);
|
||||
|
||||
// Listen for messages from the background script
|
||||
port.onMessage.addListener(function(msg) {
|
||||
console.log("Content script received message from background script:", msg);
|
||||
// Handle the response message from the background script
|
||||
});
|
||||
```
|
||||
</details>
|
||||
|
||||
Dit is ook moontlik om boodskappe vanaf 'n agtergrondskrip na 'n inhoudskrip in 'n spesifieke lappie te stuur deur **`chrome.tabs.sendMessage`** te roep waar jy die **ID van die lappie** moet aandui waarheen die boodskap gestuur moet word.
|
||||
|
||||
### Vanaf toegelate `externally_connectable` na die uitbreiding
|
||||
|
||||
**Webtoepassings en eksterne blaaieruitbreidings wat toegelaat is** in die `externally_connectable`-konfigurasie kan versoek stuur met behulp van:
|
||||
```javascript
|
||||
chrome.runtime.sendMessage(extensionId, ...
|
||||
```
|
||||
Waar dit nodig is om die **uitbreidings-ID** te noem.
|
||||
|
||||
## Web **↔︎** Inhoudskrip Kommunikasie
|
||||
|
||||
Die omgewings waar **inhoudskripte** werk en waar die gasbladsye bestaan, is van mekaar **geskei**, wat **isolering** verseker. Ten spyte van hierdie isolering het beide die vermoë om met die bladsy se **Dokument-Objekmodel (DOM)**, 'n gedeelde hulpbron, te interaksioneer. Vir die gasbladsy om te kommunikeer met die **inhoudskrip**, of onmiddellik met die uitbreiding deur die inhoudskrip, is dit nodig om die **DOM** te gebruik wat deur beide partye toeganklik is as die kommunikasiekanaal.
|
||||
Die omgewings waar **inhoudskripte** opereer en waar die gasheerbladsye bestaan, is van mekaar **geskei**, wat **isolering** verseker. Ten spyte van hierdie isolering het albei die vermoë om met die bladsy se **Dokument-Objekmodel (DOM)**, 'n gedeelde hulpbron, te interageer. Vir die gasheerbladsy om in kommunikasie met die **inhoudskrip** te tree, of onmiddellik met die uitbreiding deur die inhoudskrip, is dit nodig om die **DOM** te gebruik wat deur beide partye toeganklik is as die kommunikasiekanaal.
|
||||
|
||||
### Posboodskappe
|
||||
### Plaas Boodskappe
|
||||
|
||||
{% code title="inhoudskrip.js" %}
|
||||
```javascript
|
||||
// This is like "chrome.runtime.sendMessage" but to maintain the connection
|
||||
var port = chrome.runtime.connect();
|
||||
|
||||
window.addEventListener("message", (event) => {
|
||||
|
@ -389,6 +449,7 @@ return;
|
|||
|
||||
if (event.data.type && (event.data.type === "FROM_PAGE")) {
|
||||
console.log("Content script received: " + event.data.text);
|
||||
// Forward the message to the background script
|
||||
port.postMessage(event.data.text);
|
||||
}
|
||||
}, false);
|
||||
|
@ -408,11 +469,11 @@ window.postMessage(
|
|||
|
||||
- **`event.isTrusted`**: Dit is waar slegs as die gebeurtenis deur 'n gebruikersaksie geaktiveer is
|
||||
- Die inhoudskrip kan 'n boodskap verwag slegs as die gebruiker 'n aksie uitvoer
|
||||
- **Oorsprongsdomein**: mag 'n boodskap verwag slegs 'n lys van toegelate domeine.
|
||||
- **Oorsprong domein**: mag 'n boodskap verwag slegs 'n lys van toegelate domeine.
|
||||
- Wees baie versigtig as 'n regex gebruik word
|
||||
- **Bron**: `received_message.source !== window` kan gebruik word om te kontroleer of die boodskap van dieselfde venster af kom waar die Inhoudskrip luister.
|
||||
|
||||
Die vorige kontroles, selfs as dit uitgevoer word, kan kwesbaar wees, so kyk na die volgende bladsy **potensiële Posboodskap omseilings**:
|
||||
Die vorige kontroles, selfs as dit uitgevoer word, kan kwesbaar wees, so kyk na die volgende bladsy vir **potensiële Posboodskap omseilings**:
|
||||
|
||||
{% content-ref url="../postmessage-vulnerabilities/" %}
|
||||
[postmessage-vulnerabilities](../postmessage-vulnerabilities/)
|
||||
|
@ -420,7 +481,7 @@ Die vorige kontroles, selfs as dit uitgevoer word, kan kwesbaar wees, so kyk na
|
|||
|
||||
### Iframe
|
||||
|
||||
'n Ander moontlike manier van kommunikasie kan wees deur **Iframe-URL's**, jy kan 'n voorbeeld vind in:
|
||||
'n Ander moontlike manier van kommunikasie kan wees deur **Iframe URL's**, jy kan 'n voorbeeld vind in:
|
||||
|
||||
{% content-ref url="browext-xss-example.md" %}
|
||||
[browext-xss-example.md](browext-xss-example.md)
|
||||
|
@ -428,7 +489,7 @@ Die vorige kontroles, selfs as dit uitgevoer word, kan kwesbaar wees, so kyk na
|
|||
|
||||
### DOM
|
||||
|
||||
Dit is nie "presies" 'n kommunikasiemetode nie, maar die **web en die inhoudskrip sal toegang hê tot die web-DOM**. Dus, as die **inhoudskrip** inligting daaruit lees, **vertrouend op die web-DOM**, kan die web hierdie data **verander** (omdat die web nie vertrou moet word nie, of omdat die web vatbaar is vir XSS) en die **Inhoudskrip kompromitteer**.
|
||||
Dit is nie "presies" 'n kommunikasiemetode nie, maar die **web en die inhoudskrip sal toegang hê tot die web DOM**. Dus, as die **inhoudskrip** inligting daaruit lees, **vertrouend op die web DOM**, kan die web hierdie data **verander** (omdat die web nie vertrou moet word nie, of omdat die web vatbaar is vir XSS) en die **Inhoudskrip kompromitteer**.
|
||||
|
||||
Jy kan ook 'n voorbeeld vind van 'n **DOM-gebaseerde XSS om 'n blaaieruitbreiding te kompromitteer** in:
|
||||
|
||||
|
@ -436,21 +497,11 @@ Jy kan ook 'n voorbeeld vind van 'n **DOM-gebaseerde XSS om 'n blaaieruitbreidin
|
|||
[browext-xss-example.md](browext-xss-example.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Sensitiewe Inligting in Geheue/Kode
|
||||
|
||||
As 'n Blaaieruitbreiding **sensitiewe inligting binne sy geheue** stoor, kan dit **uitgelek** word (veral op Windows-masjiene) en daarvoor **gesoek** word.
|
||||
|
||||
Daarom moet die geheue van die Blaaieruitbreiding **nie as veilig beskou word nie** en **sensitiewe inligting** soos geloofsbriewe of mnemoniese frases **moet nie gestoor word nie**.
|
||||
|
||||
Moenie natuurlik sensitiewe inligting in die kode plaas nie, aangesien dit **openbaar** sal wees.
|
||||
|
||||
Om geheue van die blaaier te dump, kan jy **die prosesgeheue dump** of na die **instellings** van die blaaieruitbreiding gaan en klik op **`Inspect pop-up`** -> In die **`Geheue`**-afdeling -> **`Neem 'n snaphot`** en **`CTRL+F`** om binne die snaphot vir sensitiewe inligting te soek.
|
||||
|
||||
## Inhoudskrip **↔︎** Agtergrondskrip Kommunikasie
|
||||
|
||||
'n Inhoudskrip kan die funksies [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **of** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) gebruik om 'n **eenmalige JSON-seriëleerbare** boodskap te stuur.
|
||||
|
||||
Om die **antwoord** te hanteer, gebruik die teruggekeerde **Promise**. Alhoewel, vir agteruitversoenbaarheid, kan jy steeds 'n **terugroepfunksie** as die laaste argument deurgee.
|
||||
Om die **antwoord** te hanteer, gebruik die teruggekeerde **Promise**. Alhoewel, vir agteruitversoenbaarheid, kan jy nog steeds 'n **terugroepfunksie** as die laaste argument deurgee.
|
||||
|
||||
Die stuur van 'n versoek van 'n **inhoudskrip** lyk soos dit:
|
||||
```javascript
|
||||
|
@ -460,7 +511,7 @@ const response = await chrome.runtime.sendMessage({greeting: "hello"});
|
|||
console.log(response);
|
||||
})();
|
||||
```
|
||||
Stuur 'n versoek vanaf die **uitbreiding** (gewoonlik 'n **agtergrondskrip**) 'n Inhoudskrip kan die funksies gebruik, behalwe dat jy moet spesifiseer na watter oortjie om dit te stuur. Voorbeeld van hoe om 'n boodskap na die inhoudskrip in die gekose oortjie te stuur:
|
||||
Stuur 'n versoek vanaf die **uitbreiding** (gewoonlik 'n **agtergrondskrip**). Voorbeeld van hoe om 'n boodskap na die inhoudskrip in die gekose lappie te stuur:
|
||||
```javascript
|
||||
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
|
||||
(async () => {
|
||||
|
@ -483,17 +534,29 @@ sendResponse({farewell: "goodbye"});
|
|||
}
|
||||
);
|
||||
```
|
||||
In die voorbeeld wat uitgelig is, is **`sendResponse()`** op 'n sinchroniese wyse uitgevoer. Om die `onMessage` gebeurtenishanterer te wysig vir asinchroniese uitvoering van `sendResponse()`, is dit noodsaaklik om `return true;` in te sluit.
|
||||
In die voorbeeld wat uitgelig is, is **`sendResponse()`** in 'n sinchroniese manier uitgevoer. Om die `onMessage` gebeurtenishanterer te wysig vir asynchrone uitvoering van `sendResponse()`, is dit noodsaaklik om `return true;` in te sluit.
|
||||
|
||||
'n Belangrike oorweging is dat in scenario's waar meerdere bladsye ingestel is om `onMessage` gebeurtenisse te ontvang, **die eerste bladsy wat `sendResponse()` uitvoer** vir 'n spesifieke gebeurtenis, sal die enigste wees wat die reaksie effektief kan aflewer. Enige volgende reaksies op dieselfde gebeurtenis sal nie in ag geneem word nie.
|
||||
'n Belangrike oorweging is dat in scenario's waar meerdere bladsye ingestel is om `onMessage` gebeurtenisse te ontvang, **sal die eerste bladsy wat `sendResponse()` uitvoer** vir 'n spesifieke gebeurtenis die enigste wees wat die reaksie effektief kan aflewer. Enige volgende reaksies op dieselfde gebeurtenis sal nie in ag geneem word nie.
|
||||
|
||||
By die skep van nuwe uitbreidings, behoort die voorkeur eerder na beloftes te wees as na terugroepfunksies. Met betrekking tot die gebruik van terugroepfunksies, word die `sendResponse()`-funksie slegs as geldig beskou as dit direk binne die sinchroniese konteks uitgevoer word, of as die gebeurtenishanterer 'n asinchroniese operasie aandui deur `true` terug te gee. Indien geen van die handerers `true` teruggee nie of as die `sendResponse()`-funksie uit die geheue verwyder word (deur vullis ingesamel), sal die terugroep wat met die `sendMessage()`-funksie geassosieer word, standaard geaktiveer word.
|
||||
By die skep van nuwe uitbreidings, moet die voorkeur gegee word aan beloftes eerder as terugroepfunksies. Met betrekking tot die gebruik van terugroepfunksies, word die `sendResponse()`-funksie as geldig beskou slegs as dit direk binne die sinchroniese konteks uitgevoer word, of as die gebeurtenishanterer 'n asynchrone operasie aandui deur `true` terug te gee. Indien geen van die handvatsels `true` teruggee nie of as die `sendResponse()`-funksie uit die geheue verwyder word (garbage-collected), sal die terugroepfunksie wat met die `sendMessage()`-funksie geassosieer word, standaard geaktiveer word.
|
||||
|
||||
## Sensitiewe Inligting in Geheue/Kode/Klembord
|
||||
|
||||
As 'n Blaaieruitbreiding **sensitiewe inligting binne sy geheue** stoor, kan dit **uitgelek** (veral in Windows-masjiene) en vir hierdie inligting **gesoek** word.
|
||||
|
||||
Daarom moet die geheue van die Blaaieruitbreiding **nie as veilig beskou word nie** en **sensitiewe inligting** soos geloofsbriewe of mnemoniese frases **moet nie gestoor word nie**.
|
||||
|
||||
Moenie natuurlik sensitiewe inligting in die kode plaas nie, aangesien dit **openbaar** sal wees.
|
||||
|
||||
Om geheue van die blaaier te dump, kan jy **die prosesgeheue dump** of na die **instellings** van die blaaieruitbreiding gaan en klik op **`Inspect pop-up`** -> In die **`Geheue`** afdeling -> **`Neem 'n snaphost`** en **`CTRL+F`** om binne die snaphot vir sensitiewe inligting te soek.
|
||||
|
||||
Verder moet hoogs sensitiewe inligting soos mnemoniese sleutels of wagwoorde **nie toegelaat word om in die klembord gekopieer te word** (of ten minste verwyder dit van die klembord binne 'n paar sekondes) omdat prosesse wat die klembord monitor dit kan kry.
|
||||
|
||||
## Laai 'n Uitbreiding in die Blaaier
|
||||
|
||||
1. **Laai** die Blaaier Uitbreiding af & pak dit uit
|
||||
1. **Laai** die Blaaieruitbreiding af & pak dit uit
|
||||
2. Gaan na **`chrome://extensions/`** en **aktiveer** die `Ontwikkelaarsmodus`
|
||||
3. Klik op die **`Pak ongepakte uit`** knoppie
|
||||
3. Klik op die **`Laai uitgepakte`** knoppie
|
||||
|
||||
In **Firefox** gaan jy na **`about:debugging#/runtime/this-firefox`** en klik op die **`Laai tydelike byvoeging`** knoppie.
|
||||
|
||||
|
@ -501,7 +564,7 @@ In **Firefox** gaan jy na **`about:debugging#/runtime/this-firefox`** en klik op
|
|||
|
||||
Die bronkode van 'n Chrome-uitbreiding kan deur verskeie metodes verkry word. Hieronder is gedetailleerde verduidelikings en instruksies vir elke opsie.
|
||||
|
||||
### Laai Uitbreiding as ZIP af via die Opdraglyn
|
||||
### Laai Uitbreiding as ZIP via Opdraglyn af
|
||||
|
||||
Die bronkode van 'n Chrome-uitbreiding kan as 'n ZIP-lêer afgelaai word deur die opdraglyn te gebruik. Dit behels die gebruik van `curl` om die ZIP-lêer vanaf 'n spesifieke URL te haal en dan die inhoud van die ZIP-lêer na 'n gids uit te pak. Hier is die stappe:
|
||||
|
||||
|
@ -518,7 +581,7 @@ unzip -d "$extension_id-source" "$extension_id.zip"
|
|||
|
||||
### Gebruik die CRX Viewer uitbreiding
|
||||
|
||||
'n Ander gerieflike metode is om die Chrome Extension Source Viewer te gebruik, wat 'n oopbronprojek is. Dit kan geïnstalleer word vanaf die [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Die bronkode van die kyker is beskikbaar in sy [GitHub-opgaarplek](https://github.com/Rob--W/crxviewer).
|
||||
'n Ander gerieflike metode is om die Chrome Extension Source Viewer te gebruik, wat 'n oopbronprojek is. Dit kan geïnstalleer word vanaf die [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Die bronkode van die viewer is beskikbaar in sy [GitHub-opgaarplek](https://github.com/Rob--W/crxviewer).
|
||||
|
||||
### Sien die bron van plaaslik geïnstalleerde uitbreiding
|
||||
|
||||
|
@ -543,52 +606,52 @@ Maak Chrome oop en gaan na `chrome://extensions/`. Skakel "Ontwikkelaarsmodus" i
|
|||
|
||||
## Sekuriteitsouditkontrolelys
|
||||
|
||||
Selfs al het Blaaieruitbreidings 'n **beperkte aanvalsvlak**, mag sommige van hulle **kwesbaarhede** of **potensiële verhardingsverbeterings** bevat. Die volgende is die mees algemene:
|
||||
Alhoewel Blaaieruitbreidings 'n **beperkte aanvalsoppervlak** het, mag sommige van hulle **kwesbaarhede** of **potensiële verhardingsverbeterings** bevat. Die volgende is die mees algemene:
|
||||
|
||||
* [ ] **Beperk** soveel as moontlik aangevraagde **`permissions`**
|
||||
* [ ] **Beperk** soveel as moontlik **`host_permissions`**
|
||||
* [ ] Gebruik 'n **sterk** **`content_security_policy`**
|
||||
* [ ] **Beperk** soveel as moontlik die **`externally_connectable`**, indien geen benodig word nie en moontlik, los dit nie standaard nie, spesifiseer **`{}`**
|
||||
* [ ] As 'n **URL vatbaar vir XSS of oorneembaarheid** hier genoem word, sal 'n aanvaller in staat wees om **boodskappe direk na die agtergrondskripte te stuur**. Baie kragtige omseiling.
|
||||
* [ ] As 'n **URL kwesbaar vir XSS of oorneembaarheid** hier genoem word, sal 'n aanvaller in staat wees om **boodskappe direk na die agtergrondskripte te stuur**. Baie kragtige deurdring.
|
||||
* [ ] **Beperk** soveel as moontlik die **`web_accessible_resources`**, selfs leeg indien moontlik.
|
||||
* [ ] As **`web_accessible_resources`** nie nul is nie, kyk vir [**ClickJacking**](browext-clickjacking.md)
|
||||
* [ ] Indien enige **kommunikasie** plaasvind vanaf die **uitbreiding** na die **webbladsy**, [**kyk vir XSS**](browext-xss-example.md) **kwesbaarhede** wat veroorsaak word deur die kommunikasie.
|
||||
* [ ] As **`web_accessible_resources`** nie niks is nie, kyk vir [**ClickJacking**](browext-clickjacking.md)
|
||||
* [ ] Indien enige **kommunikasie** plaasvind vanaf die **uitbreiding** na die **webbladsy**, [**kyk vir XSS**](browext-xss-example.md) **kwesbaarhede** wat veroorsaak word in die kommunikasie.
|
||||
* [ ] Indien Post Messages gebruik word, kyk vir [**Post Message kwesbaarhede**](../postmessage-vulnerabilities/)**.**
|
||||
* [ ] As die **Inhoudskrip toegang tot DOM-detail** het, kyk dat hulle nie 'n XSS inbring nie as hulle deur die web **gewysig** word
|
||||
* [ ] Maak 'n spesiale klem daarop as hierdie kommunikasie ook betrokke is by die **Inhoudskrip -> Agtergrondskripskommunikasie**
|
||||
* **Sensitiewe inligting moet nie binne die Blaaieruitbreiding se kode nie** gestoor word nie
|
||||
* **Sensitiewe inligting moet nie binne die Blaaieruitbreiding se geheue nie** gestoor word nie
|
||||
* [ ] As die **Inhoudskrip toegang tot DOM-detail** gebruik, kyk dat hulle nie 'n XSS inbring nie as hulle deur die web gewysig word
|
||||
* [ ] Maak 'n spesiale klem as hierdie kommunikasie ook betrokke is by die **Inhoudskrip -> Agtergrondskripskommunikasie**
|
||||
* **Sensitiewe inligting moet nie binne die Blaaieruitbreiding se kode nie** gestoor word
|
||||
* **Sensitiewe inligting moet nie binne die Blaaieruitbreiding se geheue nie** gestoor word
|
||||
|
||||
## Gereedskap
|
||||
|
||||
### [**Tarnish**](https://thehackerblog.com/tarnish/)
|
||||
|
||||
* Haal enige Chrome-uitbreiding van 'n voorsiene Chrome-webwerf skakel af.
|
||||
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **kyker**: vertoon eenvoudig 'n JSON-verfraaide weergawe van die uitbreiding se manifest.
|
||||
* **Vingerafdrukontleding**: Opstel van [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) en outomatiese generering van Chrome-uitbreidingsvingerafdruk-JavaScript.
|
||||
* **Potensiële Clickjacking-analise**: Opstel van uitbreidings-HTML-bladsye met die [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) rigtingaanduiding. Hierdie is potensieel vatbaar vir clickjacking, afhangende van die doel van die bladsye.
|
||||
* **Toestemmingwaarskuwing(s) kyker**: wat 'n lys van al die Chrome-toestemming-promptwaarskuwings wys wat vertoon sal word wanneer 'n gebruiker probeer om die uitbreiding te installeer.
|
||||
* **Gevaarlike Funksie(s)**: wys die ligging van gevaarlike funksies wat potensieel deur 'n aanvaller uitgebuit kan word (bv. funksies soos innerHTML, chrome.tabs.executeScript).
|
||||
* **Ingangspunt(e)**: wys waar die uitbreiding gebruiker/eksterne insette aanvaar. Dit is nuttig om 'n begrip van 'n uitbreiding se oppervlakte te kry en potensiële punte te soek om kwaadwillig saamgestelde data na die uitbreiding te stuur.
|
||||
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: vertoon eenvoudig 'n JSON-verfraaide weergawe van die uitbreiding se manifest.
|
||||
* **Vingerafdruk-analise**: Opvang van [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) en outomatiese generering van Chrome-uitbreidingsvingerafdruk-JavaScript.
|
||||
* **Potensiële Clickjacking-analise**: Opvang van uitbreidings-HTML-bladsye met die [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) rigting wat gestel is. Hierdie is potensieel kwesbaar vir clickjacking afhangende van die doel van die bladsye.
|
||||
* **Toestemmingwaarskuwing(s) weergawe**: wat 'n lys van al die Chrome-toestemming-promptwaarskuwings wys wat vertoon sal word wanneer 'n gebruiker probeer om die uitbreiding te installeer.
|
||||
* **Gevaarlike Funksie(s)**: wys die plek van gevaarlike funksies wat potensieel deur 'n aanvaller uitgebuit kan word (bv. funksies soos innerHTML, chrome.tabs.executeScript).
|
||||
* **Ingangspunt(e)**: wys waar die uitbreiding gebruiker/eksterne insette aanvaar. Dit is nuttig om 'n begrip van 'n uitbreiding se aanvalsoppervlak te kry en te soek na potensiële punte om kwaadwillig saamgestelde data na die uitbreiding te stuur.
|
||||
* Beide die Gevaarlike Funksie(s) en Ingangspunt(e) skandeerders het die volgende vir hul gegenereerde waarskuwings:
|
||||
* Relevant kodefragment en lyn wat die waarskuwing veroorsaak het.
|
||||
* Relevant kode-uitsnit en lyn wat die waarskuwing veroorsaak het.
|
||||
* Beskrywing van die probleem.
|
||||
* 'n "Bekyk Lêer" knoppie om die volledige bronlêer wat die kode bevat, te sien.
|
||||
* Die pad van die gewaarskuwde lêer.
|
||||
* Die volledige Chrome-uitbreidings-URI van die gewaarskuwde lêer.
|
||||
* Die tipe lêer wat dit is, soos 'n Agtergrondbladsy-skrip, Inhoudskrip, Blaaieraksie, ens.
|
||||
* As die kwesbare lyn in 'n JavaScript-lêer is, die paaie van al die bladsye waar dit ingesluit is, sowel as hierdie bladsye se tipe, en [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) status.
|
||||
* **Inhoudsekuriteitsbeleid (CSP) ontleder en omseilingskontroleerder**: Dit sal swakhede in jou uitbreiding se CSP aanwys en ook enige potensiële maniere belig wat jou CSP omseil kan word as gevolg van gewitlys-CDN's, ens.
|
||||
* **Inhoudsekuriteitsbeleid (CSP) analiseerder en omseilingskontroleerder**: Dit sal swakhede in jou uitbreiding se CSP aanwys en ook enige potensiële maniere belig wat jou CSP omseil weens witgelysde CDN's, ens.
|
||||
* **Bekende Kwesbare Biblioteke**: Dit gebruik [Retire.js](https://retirejs.github.io/retire.js/) om vir enige gebruik van bekende-kwesbare JavaScript-biblioteke te kontroleer.
|
||||
* Laai die uitbreiding en geformateerde weergawes af.
|
||||
* Laai die oorspronklike uitbreiding af.
|
||||
* Laai 'n verfraaide weergawe van die uitbreiding af (outomaties verfraaide HTML en JavaScript).
|
||||
* Outomatiese kaching van skandeerresultate, die uitvoer van 'n uitbreidingskandering sal die eerste keer wat jy dit hardloop 'n goeie tyd neem. Die tweede keer, mits die uitbreiding nie opgedateer is nie, sal bykans onmiddellik wees as gevolg van die resultate wat gekas is.
|
||||
* Skakelbare Rapport-URL's, maak dit maklik om iemand anders aan 'n uitbreidingsverslag wat deur tarnish gegenereer is, te skakel.
|
||||
* Outomatiese kaching van skandeerresultate, die uitvoer van 'n uitbreidingskandering sal 'n goeie tyd neem die eerste keer wat jy dit hardloop. Die tweede keer, mits die uitbreiding nie opgedateer is nie, sal bykans onmiddellik wees as gevolg van die resultate wat gekas is.
|
||||
* Skakelbare Rapport-URL's, maak dit maklik om iemand anders na 'n uitbreidingsverslag wat deur tarnish gegenereer is, te skakel.
|
||||
|
||||
### [Neto](https://github.com/elevenpaths/neto)
|
||||
|
||||
Projek Neto is 'n Python 3-pakket wat ontwerp is om die analise en ontrafeling van verskuilde kenmerke van blaaierinvoegings en -uitbreidings vir bekende blaaier soos Firefox en Chrome te ontleed en te ontrafel. Dit outomatiseer die proses om die gepakde lêers te ontzip om hierdie kenmerke uit relevante bronne in 'n uitbreiding soos `manifest.json`, lokalisasiegids of Javascript- en HTML-bronlêers te onttrek.
|
||||
Projek Neto is 'n Python 3-pakket wat ontwerp is om te analiseer en verborge kenmerke van blaaierplugins en -uitbreidings vir bekende blaaier soos Firefox en Chrome te ontrafel. Dit outomatiseer die proses om die gepakde lêers te ontzip om hierdie kenmerke uit relevante bronne in 'n uitbreiding soos `manifest.json`, lokalisasiegidse of Javascript- en HTML-bronlêers te onttrek.
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -605,13 +668,11 @@ Projek Neto is 'n Python 3-pakket wat ontwerp is om die analise en ontrafeling v
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks uitrusting**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
|
Loading…
Reference in a new issue