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

139 lines
14 KiB
Markdown
Raw Normal View History

# BrowExt - ruhusa & host_permissions
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
2024-02-11 02:13:58 +00:00
Njia nyingine za kusaidia HackTricks:
2023-12-31 01:25:17 +00:00
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
2024-02-11 02:13:58 +00:00
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
2024-02-11 02:13:58 +00:00
## Taarifa Msingi
### **`ruhusa`**
Ruhusa zinatambuliwa katika faili ya **`manifest.json`** ya ugani kwa kutumia mali ya **`permissions`** na kuruhusu ufikiaji wa karibu kila kitu ambacho kivinjari kinaweza kufikia (Vidakuki au Uhifadhi wa Kimwili):
Majedwali ya awali yanatangaza kuwa ugani unahitaji ruhusa ya `storage`. Hii inamaanisha kuwa inaweza kutumia [API ya uhifadhi](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kuhifadhi data yake kwa kudumu. Tofauti na vidakuzi au APIs za `localStorage` ambazo humpa mtumiaji kiwango fulani cha udhibiti, **uhifadhi wa ugani kawaida unaweza kufutwa tu kwa kusakinusha ugani**.
Ugani utaomba ruhusa zilizoonyeshwa katika faili yake ya **`manifest.json`** na Baada ya kusakinisha ugani, unaweza **kuangalia ruhusa zake kila wakati kwenye kivinjari chako**, kama inavyoonyeshwa kwenye picha hii:
<figure><img src="../../.gitbook/assets/image (15).png" alt=""><figcaption></figcaption></figure>
Unaweza kupata [**orodha kamili ya ruhusa ambayo Ugani wa Kivinjari cha Chromium unaweza kuomba hapa**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) na [**orodha kamili kwa ugani wa Firefox hapa**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
### `host_permissions`
Mipangilio ya hiari lakini yenye nguvu ya **`host_permissions`** inaonyesha na ni kwa wenyeji gani ugani utaweza kuingiliana kupitia apis kama vile [`vidakuzi`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`ombi la wavuti`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest), na [`vichupo`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
`host_permissions` ifuatayo kimsingi inaruhusu kila wavuti:
```json
"host_permissions": [
2024-02-11 02:13:58 +00:00
"*://*/*"
]
// Or:
"host_permissions": [
2024-02-11 02:13:58 +00:00
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
2024-02-11 02:13:58 +00:00
"<all_urls>"
]
```
Hizi ni seva ambazo kifaa cha kivinjari kinaweza kupata kwa uhuru. Hii ni kwa sababu wakati kifaa cha kivinjari kinaita **`fetch("https://gmail.com/")`** haizuiliwi na CORS.
2024-02-11 02:13:58 +00:00
## Kutumia `permissions` na `host_permissions`
2024-02-11 02:13:58 +00:00
### Vichupo
Zaidi ya hayo, **`host_permissions`** pia hufungua "advanced" [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **kazi.** Zinaruhusu kifaa cha kivinjari kuita [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) na siyo tu kupata **orodha ya vichupo vya kivinjari vya mtumiaji** lakini pia kujifunza ni **ukurasa wa wavuti (maana yake anwani na kichwa) umepakia**.
{% hint style="danger" %}
Siyo tu hivyo, wasikilizaji kama [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **pia hufanywa kuwa na manufaa zaidi.** Wataarifiwa wakati wowote ukurasa mpya unapakia kwenye kichupo.
{% endhint %}
### Kuendesha skripti za maudhui <a href="#running-content-scripts" id="running-content-scripts"></a>
Skripti za maudhui mara nyingi hazijaandikwa kwa njia ya tuli kwenye mizizi ya kifaa. Kwa kutosha **`host_permissions`**, **vifaa vinaweza pia kuzipakia kwa njia ya kudumu kwa kuita** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **au** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript).
Viwango vyote viwili huruhusu kutekeleza siyo tu faili zilizomo kwenye vifaa kama skripti za maudhui bali pia **nambari za aina yoyote**. Ya kwanza huruhusu kupeleka nambari ya JavaScript kama herufi wakati wa pili inatarajia kazi ya JavaScript ambayo ni dhaifu kwa mashambulizi ya kuingiza. Hata hivyo, viwango vyote viwili vitasababisha vurugu ikiwa vitatumika vibaya.
{% hint style="danger" %}
Mbali na uwezo uliotajwa hapo juu, skripti za maudhui zinaweza kwa mfano **kukamata siri** kama hizo zinaingizwa kwenye kurasa za wavuti. Njia nyingine ya kuzitumia ni **kuingiza matangazo** kwenye kila tovuti. Kuongeza **ujumbe wa ulaghai** ili kutumia uaminifu wa tovuti za habari pia ni jambo linalowezekana. Hatimaye, zinaweza **kubadilisha benki** tovuti kuelekeza uhamishaji wa pesa.
{% endhint %}
### Mamlaka zisizoonekana <a href="#implicit-privileges" id="implicit-privileges"></a>
Baadhi ya mamlaka ya vifaa **hazihitaji kutangazwa wazi**. Mfano mmoja ni [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): kazi yake msingi inapatikana bila mamlaka yoyote. Kifaa chochote kinaweza kupokea taarifa wakati unafungua na kufunga vichupo, lakini hakitajua tovuti gani hizo vichupo vinahusiana nazo.
Inasikika kuwa salama sana? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) sio hivyo kabisa. Inaweza kutumika **kuunda kichupo kipya**, kimsingi sawa na [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) ambayo inaweza kuitwa na tovuti yoyote. Lakini wakati `window.open()` inakabiliwa na **kizuizi cha pop-up, `tabs.create()` hakikabiliwi nacho**.
{% hint style="danger" %}
Kifaa kinaweza kuunda idadi yoyote ya vichupo wakati wowote.
{% endhint %}
Ukiangalia kupitia vigezo vinavyowezekana vya `tabs.create()`, utagundua kuwa uwezo wake unazidi ule wa `window.open()` unaruhusiwa kudhibiti. Na wakati Firefox haikubali matumizi ya URI za `data:` na API hii, Chrome haina ulinzi kama huo. **Matumizi ya URI kama hizo kwenye kiwango cha juu kumepigwa marufuku kwa sababu ya kutumiwa kwa udanganyifu** [**(angalia hapa)**](https://bugzilla.mozilla.org/show\_bug.cgi?id=1331351)**.**
[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) inafanana sana na `tabs.create()` lakini ita **badilisha kichupo kilichopo**. Kwa hivyo kifaa cha kivinjari kilicho na nia mbaya kinaweza kwa mfano kwa hiari kupakia ukurasa wa matangazo kwenye moja ya vichupo vyako, na kinaweza pia kuchochea kichupo kinachohusika pia.
2024-02-11 02:13:58 +00:00
### Kamera, mahali na marafiki <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
Labda unajua kuwa tovuti zinaweza kuomba mamlaka maalum, k.m. ili kupata kamera yako (zana za mkutano wa video) au mahali geografiki (ramani). Ina vipengele vya uwezekano mkubwa wa kutumiwa vibaya, kwa hivyo watumiaji kila wakati wanapaswa kuthibitisha kuwa bado wanataka hii.
{% hint style="danger" %}
Sivyo kwa vifaa vya kivinjari. **Ikiwa kifaa cha kivinjari** [**kinataka kupata kamera yako au kipaza sauti**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, inahitaji kuomba idhini mara moja tu**
{% endhint %}
Kawaida, kifaa kitafanya hivyo mara tu baada ya kusakinishwa. Mara tu ombi hili linakubaliwa, **upatikanaji wa kamera unawezekana wakati wowote**, hata kama mtumiaji hafanyi mwingiliano na kifaa wakati huo. Ndiyo, mtumiaji atakubali ombi hili ikiwa kifaa kinahitaji kweli upatikanaji wa kamera. Lakini baada ya hapo wanapaswa kuamini kifaa kutorodhesha kitu kwa siri.
Kwa kupata [eneo lako kamili la kijiografia](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) au [maudhui ya ubao wako wa kunakili](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API), kutoa idhini kwa uwazi hakuhitajiki kabisa. **Kifaa kinaweza tu kuongeza `geolocation` au `clipboard` kwenye** [**ingizo la mamlaka**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **ya mizizi yake.** Mamlaka hizi za upatikanaji kisha hupewa kwa siri wakati kifaa kinaposakinishwa. Kwa hivyo kifaa kilicho na nia mbaya au kilichoharibiwa na mamlaka haya kinaweza kuunda wasifu wako wa harakati au kufuatilia ubao wako wa kunakili kwa nywila zilizokopiwa bila wewe kugundua chochote.
Kuongeza neno la **`historia`** kwenye [ingizo la mamlaka](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) ya mizizi ya mizizi inaruhusu **upatikanaji wa** [**historia API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Inaruhusu kupata historia nzima ya kutembelea ya mtumiaji mara moja, bila kusubiri mtumiaji kutembelea tena tovuti hizi.
Kibali cha **`vitabu vya alamisho`** kina uwezekano sawa wa kutumiwa vibaya, hiki kinawezesha **kusoma alamisho zote kupitia** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
### Kibali cha kuhifadhi <a href="#the-storage-permission" id="the-storage-permission"></a>
Hifadhi ya kifaa ni mkusanyiko wa funguo-na-thamani, sawa sana na [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) ambayo tovuti yoyote inaweza kutumia. Kwa hivyo habari nyeti isipaswi kuhifadhiwa hapa.
Hata hivyo, makampuni ya matangazo yanaweza pia kutumia hifadhi hii.
### Mamlaka zaidi
Unaweza kupata [**orodha kamili ya mamlaka ambayo Kifaa cha Kivinjari cha Chromium kinaweza kuomba hapa**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) na [**orodha kamili kwa vifaa vya Firefox hapa**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
## Kuzuia <a href="#why-not-restrict-extension-privileges" id="why-not-restrict-extension-privileges"></a>
Sera ya msanidi wa Google inakataza wazi vifaa vya kivinjari kutoka kuomba mamlaka zaidi kuliko inavyohitajika kwa kazi zao, hivyo kupunguza ombi la mamlaka kupita kiasi. Kisa ambapo kifaa cha kivinjari kilivuka kizuizi hiki kilihusisha usambazaji wake na kivinjari yenyewe badala ya kupitia duka la nyongeza.
Vifaa vya kivinjari vinaweza kupunguza zaidi matumizi mabaya ya mamlaka ya vifaa. Kwa mfano, APIs za [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) na [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) za Chrome, zinazotumika kwa kurekodi skrini, zimedhamiriwa kupunguza matumizi mabaya. API ya tabCapture inaweza kuanzishwa tu kupitia mwingiliano wa moja kwa moja wa mtumiaji, kama vile kubonyeza kwenye ishara ya kifaa, wakati desktopCapture inahitaji uthibitisho wa mtumiaji ili dirisha lifanyiwe rekodi, kuzuia shughuli za siri za kurekodi.
Hata hivyo, kuzidisha hatua za usalama mara nyingi husababisha kupungua kwa mtego na urafiki wa vifaa. Kibali cha [activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab\_permission) inaonyesha kubadilishana hii. Ilianzishwa ili kuondoa haja ya vifaa kuomba mamlaka ya mizizi kote kwenye mtandao, kuruhusu vifaa kupata kichupo cha sasa tu baada ya kuanzishwa wazi na mtumiaji. Mfano huu ni mzuri kwa vifaa vinavyohitaji hatua zilizoanzishwa na mtumiaji lakini haukidhi mahitaji ya vifaa vinavyohitaji hatua za moja kwa moja au za kuzuia, hivyo kuhatarisha urahisi na majibu ya haraka.
## **Virejezi**
* [https://palant.info/2022/08/17/impact-of-extension-privileges/](https://palant.info/2022/08/17/impact-of-extension-privileges/)
* [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
<details>
<summary><strong>Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
2024-02-11 02:13:58 +00:00
Njia nyingine za kusaidia HackTricks:
2023-12-31 01:25:17 +00:00
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>