# BrowExt - permissions & host\_permissions {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * 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.
{% endhint %} ## Basic Information ### **`permissions`** Ruhusa zin defined katika **`manifest.json`** ya nyongeza kwa kutumia mali ya **`permissions`** na zinaruhusu ufikiaji wa karibu kila kitu ambacho kivinjari kinaweza kufikia (Cookies au Hifadhi ya Kimwili): Manifest iliyopita inatangaza kwamba nyongeza inahitaji ruhusa ya `storage`. Hii inamaanisha kwamba inaweza kutumia [API ya hifadhi](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kuhifadhi data zake kwa muda mrefu. Tofauti na cookies au API za `localStorage` ambazo zinawapa watumiaji kiwango fulani cha udhibiti, **hifadhi ya nyongeza kwa kawaida inaweza kufutwa tu kwa kuondoa nyongeza**. Nyongeza itahitaji ruhusa zilizoonyeshwa katika **`manifest.json`** yake na Baada ya kufunga nyongeza, unaweza **kila wakati kuangalia ruhusa zake katika kivinjari chako**, kama inavyoonyeshwa katika picha hii:
Unaweza kupata [**orodha kamili ya ruhusa ambazo Nyongeza ya Kivinjari cha Chromium inaweza kuomba hapa**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) na [**orodha kamili ya nyongeza za 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 **`host_permissions`** inaonyesha ni mwenyeji gani nyongeza itakuwa na uwezo wa kuingiliana kupitia APIs kama [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest), na [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs). Mipangilio ifuatayo ya `host_permissions` kimsingi inaruhusu kila wavuti: ```json "host_permissions": [ "*://*/*" ] // Or: "host_permissions": [ "http://*/*", "https://*/*" ] // Or: "host_permissions": [ "" ] ``` Hizi ni mwenyeji ambao nyongeza ya kivinjari inaweza kufikia bure. Hii ni kwa sababu wakati nyongeza ya kivinjari inaita **`fetch("https://gmail.com/")`** haijakabiliwa na vizuizi vya CORS. ## Kutumia vibaya `permissions` na `host_permissions` ### Tabs Zaidi ya hayo, **`host_permissions`** pia inafungua kazi za “kisasa” [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **.** Zinawaruhusu nyongeza kuita [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) na sio tu kupata **orodha ya tabs za kivinjari za mtumiaji** bali pia kujifunza ni **ukurasa gani wa wavuti (maana anwani na kichwa) umepakuliwa**. {% hint style="danger" %} Sio hivyo tu, wasikilizaji kama [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **wanakuwa na manufaa zaidi pia**. Hizi zitaarifiwa kila wakati ukurasa mpya unapopakuliwa kwenye tab. {% endhint %} ### Kuendesha scripts za maudhui Scripts za maudhui hazihitajiki kuandikwa kwa njia ya kudumu kwenye hati ya nyongeza. Ikiwa kuna **`host_permissions`** ya kutosha, **nyongeza zinaweza pia kuzipakia kwa njia ya kidinamikali 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). APIs zote mbili zinaruhusu kutekeleza si tu faili zilizomo kwenye nyongeza kama scripts za maudhui bali pia **kod**e za kiholela. Ya kwanza inaruhusu kupitisha msimbo wa JavaScript kama string wakati ya pili inatarajia kazi ya JavaScript ambayo ina uwezekano mdogo wa udhaifu wa sindano. Hata hivyo, APIs zote mbili zitaleta machafuko ikiwa zitatumiwa vibaya. {% hint style="danger" %} Mbali na uwezo ulio juu, scripts za maudhui zinaweza kwa mfano **kudhibiti akidi** wakati zinapoingizwa kwenye kurasa za wavuti. Njia nyingine ya kawaida ya kuzitumia vibaya ni **kuingiza matangazo** kwenye kila tovuti. Kuongeza **ujumbe wa udanganyifu** ili kudhuru uaminifu wa tovuti za habari pia inawezekana. Hatimaye, zinaweza **kubadilisha tovuti za benki** ili kuhamasisha uhamisho wa pesa. {% endhint %} ### Privileges zisizo za moja kwa moja Baadhi ya haki za nyongeza **hazihitaji kutangazwa wazi**. Mfano mmoja ni [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): kazi yake ya msingi inapatikana bila haki zozote. Nyongeza yoyote inaweza kuarifiwa unapofungua na kufunga tabs, haitajua tu ni tovuti zipi tabs hizi zinahusiana nazo. Inasikika kuwa haina madhara? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) ni kidogo zaidi. Inaweza kutumika **kuunda tab mpya**, kimsingi sawa na [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) ambayo inaweza kuitwa na tovuti yoyote. Hata hivyo, wakati `window.open()` inakabiliwa na **kizuizi cha pop-up, `tabs.create()` haiko hivyo**. {% hint style="danger" %} Nyongeza inaweza kuunda idadi yoyote ya tabs wakati wowote inapotaka. {% endhint %} Ukichunguza vigezo vya `tabs.create()`, pia utaona kwamba uwezo wake unazidi sana kile ambacho `window.open()` inaruhusiwa kudhibiti. Na wakati Firefox haiwezi kutumia `data:` URIs na API hii, Chrome haina ulinzi kama huo. **Matumizi ya URIs kama hizo kwenye kiwango cha juu yame** [**zimepigwa marufuku kwa sababu ya kutumiwa vibaya kwa udukuzi**](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) ni sawa na `tabs.create()` lakini it **badilisha tab iliyopo**. Hivyo nyongeza mbaya inaweza kwa mfano kupakia ukurasa wa matangazo kwenye moja ya tabs zako, na inaweza pia kuamsha tab inayohusiana. ### Kamera ya wavuti, geolocation na marafiki Huenda unajua kwamba tovuti zinaweza kuomba ruhusa maalum, kwa mfano ili kufikia kamera yako ya wavuti (zana za video conferencing) au eneo lako la kijiografia (ramani). Ni vipengele vyenye uwezo mkubwa wa matumizi mabaya, hivyo watumiaji kila wakati wanapaswa kuthibitisha kwamba bado wanataka hili. {% hint style="danger" %} Sio hivyo kwa nyongeza za kivinjari. **Ikiwa nyongeza ya kivinjari** [**inataka kufikia kamera yako ya wavuti au kipaza sauti**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, inahitaji tu kuomba ruhusa mara moja** {% endhint %} Kawaida, nyongeza itafanya hivyo mara moja baada ya kufungwa. Mara hii ombi likikubaliwa, **ufikiaji wa kamera ya wavuti unaruhusiwa wakati wowote**, hata kama mtumiaji hajishughulishi na nyongeza kwa wakati huu. Ndio, mtumiaji atakubali tu ombi hili ikiwa nyongeza inahitaji kweli ufikiaji wa kamera ya wavuti. Lakini baada ya hapo wanapaswa kuamini nyongeza hiyo isirekodi chochote kwa siri. Kwa ufikiaji wa [eneo lako halisi la kijiografia](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) au [maudhui ya clipboard yako](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API), kutoa ruhusa wazi si lazima kabisa. **Nyongeza inachangia tu `geolocation` au `clipboard` kwenye** [**kituo cha ruhusa**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **ya hati yake**. Hizi haki za ufikiaji zinatolewa kwa njia isiyo ya moja kwa moja wakati nyongeza inafungwa. Hivyo nyongeza mbaya au iliyovunjika yenye haki hizi inaweza kuunda wasifu wako wa mwendo au kufuatilia clipboard yako kwa nywila zilizokopwa bila wewe kugundua chochote. Kuongeza neno **`history`** kwenye [kituo cha ruhusa](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) ya hati ya nyongeza inatoa **ufikiaji wa** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Inaruhusu kupata historia yote ya kivinjari ya mtumiaji mara moja, bila kusubiri mtumiaji kutembelea tovuti hizi tena. Ruhusa ya **`bookmarks`** ina uwezo wa matumizi mabaya sawa, hii inaruhusu **kusoma alama zote kupitia** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks). ### Ruhusa ya Hifadhi Hifadhi ya nyongeza ni mkusanyiko wa funguo-thamani, sawa na [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) ambayo tovuti yoyote inaweza kutumia. Hivyo hakuna taarifa nyeti inapaswa kuhifadhiwa hapa. Hata hivyo, kampuni za matangazo zinaweza pia kutumia hifadhi hii vibaya. ### Ruhusa zaidi Unaweza kupata [**orodha kamili ya ruhusa ambazo Nyongeza ya Kivinjari ya Chromium inaweza kuomba hapa**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) na [**orodha kamili ya nyongeza za Firefox hapa**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.** ## Kuzuia Sera ya mende wa Google inakataza wazi nyongeza kuomba ruhusa zaidi ya zile zinazohitajika kwa kazi zao, hivyo kupunguza maombi ya ruhusa kupita kiasi. Mfano ambapo nyongeza ya kivinjari ilipita mipaka hii ilikuwa ni usambazaji wake pamoja na kivinjari chenyewe badala ya kupitia duka la nyongeza. Kivinjari kinaweza pia kupunguza matumizi mabaya ya haki za nyongeza. Kwa mfano, [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) na [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) APIs za Chrome, zinazotumiwa kwa kurekodi skrini, zimeundwa ili kupunguza matumizi mabaya. API ya tabCapture inaweza kuamshwa tu kupitia mwingiliano wa moja kwa moja wa mtumiaji, kama kubofya kwenye ikoni ya nyongeza, wakati desktopCapture inahitaji uthibitisho wa mtumiaji kwa dirisha lililoandikwa, kuzuia shughuli za kurekodi kwa siri. Hata hivyo, kuimarisha hatua za usalama mara nyingi husababisha kupungua kwa kubadilika na urahisi wa matumizi wa nyongeza. Ruhusa ya [activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab\_permission) inaonyesha biashara hii. Ilianzishwa ili kuondoa hitaji la nyongeza kuomba ruhusa za mwenyeji kwenye mtandao mzima, ikiruhusu nyongeza kufikia tu tab ya sasa wakati wa kuamshwa wazi na mtumiaji. Mfano huu ni mzuri kwa nyongeza zinazohitaji hatua zinazohimizwa na mtumiaji lakini unashindwa kwa zile zinazohitaji hatua za moja kwa moja au za awali, hivyo kuathiri urahisi na majibu ya haraka. ## **Marejeleo** * [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) {% hint style="success" %} Jifunze na fanya mazoezi ya AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Jifunze na fanya mazoezi ya GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Angalia [**mpango wa usajili**](https://github.com/sponsors/carlospolop)! * **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
{% endhint %}