13 KiB
BrowExt - permissions & host_permissions
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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 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 na orodha kamili ya nyongeza za Firefox hapa.
host_permissions
Mipangilio ya hiari lakini yenye nguvu host_permissions
inaonyesha ni mwenyeji gani nyongeza itakuwa na uwezo wa kuingiliana kupitia APIs kama cookies
, webRequest
, na tabs
.
Mipangilio ifuatayo ya host_permissions
kimsingi inaruhusu kila wavuti:
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
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 . Zinawaruhusu nyongeza kuita 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 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() au scripting.executeScript().
APIs zote mbili zinaruhusu kutekeleza si tu faili zilizomo kwenye nyongeza kama scripts za maudhui bali pia kode 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: 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 ni kidogo zaidi. Inaweza kutumika kuunda tab mpya, kimsingi sawa na 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.
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, 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 au maudhui ya clipboard yako, kutoa ruhusa wazi si lazima kabisa. Nyongeza inachangia tu geolocation
au clipboard
kwenye kituo cha ruhusa 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 ya hati ya nyongeza inatoa ufikiaji wa history API. 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.
Ruhusa ya Hifadhi
Hifadhi ya nyongeza ni mkusanyiko wa funguo-thamani, sawa na 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 na orodha kamili ya nyongeza za Firefox hapa.
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 na 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 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://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)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au fuata sisi kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.