Browser Extension Pentesting Methodology

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

Proširenja pregledača su napisana u JavaScript-u i učitavaju se od strane pregledača u pozadini. Imaju svoj DOM ali mogu da interaguju sa DOM-om drugih sajtova. To znači da mogu ugroziti poverljivost, integritet i dostupnost (CIA) drugih sajtova.

Glavne komponente

Dizajn proširenja izgleda najbolje kada je vizualizovan i sastoji se od tri komponente. Pogledajmo svaku komponentu detaljnije.

Skripte sadržaja

Svaka skripta sadržaja ima direktni pristup DOM-u jedne veb stranice i time je izložena potencijalno zlonamernom unosu. Međutim, skripta sadržaja ne sadrži dozvole osim mogućnosti slanja poruka jezgru proširenja.

Jezgro proširenja

Jezgro proširenja sadrži većinu privilegija/pristupa proširenja, ali jezgro proširenja može interagovati sa veb sadržajem samo putem XMLHttpRequest i skripti sadržaja. Takođe, jezgro proširenja nema direktni pristup host mašini.

Nativni binarni fajl

Proširenje dozvoljava nativnom binarnom fajlu da pristupi host mašini sa punim privilegijama korisnika. Nativni binarni fajl interaguje sa jezgrom proširenja putem standardnog interfejsa za programiranje aplikacija Netscape Plugin (NPAPI) koji koristi Flash i druge dodatke pregledača.

Granice

Da bi dobio puna korisnička prava, napadač mora ubediti proširenje da prosledi zlonameran unos iz skripte sadržaja jezgru proširenja i iz jezgra proširenja nativnom binarnom fajlu.

Svaka komponenta proširenja je odvojena jedna od druge jakim zaštitnim granicama. Svaka komponenta se izvršava u zasebnom procesu operativnog sistema. Skripte sadržaja i jezgra proširenja se izvršavaju u peskovitim procesima nedostupnim većini usluga operativnog sistema.

Pored toga, skripte sadržaja su odvojene od svojih povezanih veb stranica izvršavanjem u zasebnom JavaScript hipu. Skripta sadržaja i veb stranica imaju pristup istom osnovnom DOM-u, ali se nikada ne razmenjuju JavaScript pokazivači, sprečavajući curenje JavaScript funkcionalnosti.

manifest.json

Chrome proširenje je samo ZIP folder sa .crx ekstenzijom fajla. Jezgro proširenja je manifest.json fajl na korenu foldera, koji specificira dizajn, dozvole i druge konfiguracione opcije.

Primer:

{
"manifest_version": 2,
"name": "My extension",
"version": "1.0",
"permissions": [
"storage"
],
"content_scripts": [
{
"js": [
"script.js"
],
"matches": [
"https://example.com/*",
"https://www.example.com/*"
],
"exclude_matches": ["*://*/*business*"],
}
],
"background": {
"scripts": [
"background.js"
]
},
"options_ui": {
"page": "options.html"
}
}

content_scripts

Content skripte se učitavaju svaki put kada korisnik navigira na odgovarajuću stranicu, u našem slučaju bilo koju stranicu koja odgovara izrazu https://example.com/* i ne odgovara regexu *://*/*/business*. Oni se izvršavaju kao skripte same stranice i imaju proizvoljan pristup Document Object Model (DOM) stranice.

"content_scripts": [
{
"js": [
"script.js"
],
"matches": [
"https://example.com/*",
"https://www.example.com/*"
],
"exclude_matches": ["*://*/*business*"],
}
],

Da biste uključili ili isključili više URL-ova, takođe je moguće koristiti include_globs i exclude_globs.

Ovo je primer sadržajnog skripta koji će dodati dugme za objašnjenje na stranici kada API za skladištenje koristi se za dobijanje vrednosti message iz skladišta proširenja.

chrome.storage.local.get("message", result =>
{
let div = document.createElement("div");
div.innerHTML = result.message + " <button>Explain</button>";
div.querySelector("button").addEventListener("click", () =>
{
chrome.runtime.sendMessage("explain");
});
document.body.appendChild(div);
});

Kada se klikne na ovaj dugme, sadržajni skript šalje poruku stranicama proširenja korišćenjem runtime.sendMessage() API. Ovo je zbog ograničenja sadržajnog skripta u direktnom pristupu API-ima, pri čemu je storage među retkim izuzecima. Za funkcionalnosti van ovih izuzetaka, poruke se šalju stranicama proširenja sa kojima sadržajni skriptovi mogu komunicirati.

Zavisno od pretraživača, mogućnosti sadržajnog skripta mogu se blago razlikovati. Za pretraživače zasnovane na Chromium-u, lista mogućnosti dostupna je u Chrome Developers dokumentaciji, a za Firefox, MDN služi kao primarni izvor. Takođe je važno napomenuti da sadržajni skriptovi imaju mogućnost komunikacije sa pozadinskim skriptovima, omogućavajući im da izvrše radnje i prenesu odgovore nazad.

Za pregledanje i debagovanje sadržajnih skriptova u Chrome-u, meni Chrome developer alatki može se pristupiti preko Opcije > Više alatki > Developer alatke ILI pritiskom na Ctrl + Shift + I.

Kada se prikažu developer alatke, treba kliknuti na Tab izvora, a zatim na Tab sadržajnih skriptova. Ovo omogućava posmatranje pokrenutih sadržajnih skriptova iz različitih proširenja i postavljanje tačaka prekida za praćenje toka izvršenja.

Ubačeni sadržajni skriptovi

Imajte na umu da Sadržajni skriptovi nisu obavezni jer je takođe moguće dinamički ubaciti skripte i programatski ih ubaciti na veb stranice putem tabs.executeScript. Ovo zapravo pruža više granularnih kontrola.

Za programatsko ubacivanje sadržajnog skripta, proširenju je potrebna dozvola domaćina za stranicu u koju će skriptovi biti ubačeni. Ove dozvole mogu se obezbediti ili zahtevanjem u manifestu proširenja ili privremeno putem activeTab.

Primer proširenja zasnovanog na activeTab-u

manifest.json
{
"name": "My extension",
...
"permissions": [
"activeTab",
"scripting"
],
"background": {
"service_worker": "background.js"
},
"action": {
"default_title": "Action Button"
}
}
  • Umetnite JS fajl pritiskom na dugme:

// content-script.js
document.body.style.backgroundColor = "orange";

//service-worker.js - Inject the JS file
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
files: ["content-script.js"]
});
});
  • Ubacivanje funkcije na klik:

//service-worker.js - Inject a function
function injectedFunction() {
document.body.style.backgroundColor = "orange";
}

chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target : {tabId : tab.id},
func : injectedFunction,
});
});

Primer sa dozvolama skriptovanja

// service-workser.js
chrome.scripting.registerContentScripts([{
id : "test",
matches : [ "https://*.example.com/*" ],
excludeMatches : [ "*://*/*business*" ],
js : [ "contentScript.js" ],
}]);

// Another example
chrome.tabs.executeScript(tabId, { file: "content_script.js" });

Content Scripts run_at

Polje run_at kontroliše kada se JavaScript fajlovi ubacuju u web stranicu. Preferirana i podrazumevana vrednost je "document_idle".

Moguće vrednosti su:

  • document_idle: Kada god je moguće

  • document_start: Nakon bilo kojih fajlova iz css, ali pre nego što je konstruisan bilo koji drugi DOM ili pokrenut bilo koji drugi skript.

  • document_end: Odmah nakon što je DOM kompletan, ali pre nego što su se učitale podređene resurse poput slika i frejmova.

Putem manifest.json

{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["https://*.example.com/*"],
"run_at": "document_idle",
"js": ["contentScript.js"]
}
],
...
}

Preko service-worker.js

chrome.scripting.registerContentScripts([{
id : "test",
matches : [ "https://*.example.com/*" ],
runAt : "document_idle",
js : [ "contentScript.js" ],
}]);

pozadina

Poruke poslate od strane skriptova sadržaja primaju se od strane pozadinske stranice, koja ima centralnu ulogu u koordinaciji komponenti proširenja. Posebno, pozadinska stranica perzistira tokom trajanja proširenja, delujući diskretno bez direktnog korisničkog interakcije. Poseduje svoj Document Object Model (DOM), omogućavajući kompleksne interakcije i upravljanje stanjem.

Ključne tačke:

  • Uloga pozadinske stranice: Deluje kao nervni centar proširenja, osiguravajući komunikaciju i koordinaciju među različitim delovima proširenja.

  • Perzistencija: To je stalno prisutno entitet, nevidljivo korisniku ali integralno za funkcionalnost proširenja.

  • Automatsko generisanje: Ako nije eksplicitno definisano, pretraživač će automatski kreirati pozadinsku stranicu. Ova automatski generisana stranica će uključiti sve pozadinske skripte navedene u manifestu proširenja, osiguravajući besprekorno funkcionisanje pozadinskih zadataka proširenja.

Praktičnost koju pruža pretraživač u automatskom generisanju pozadinske stranice (kada nije eksplicitno navedeno) osigurava da su sve neophodne pozadinske skripte integrisane i operativne, olakšavajući proces postavljanja proširenja.

Primer pozadinske skripte:

chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>
{
if (request == "explain")
{
chrome.tabs.create({ url: "https://example.net/explanation" });
}
})

Koristi runtime.onMessage API da bi osluškivao poruke. Kada primi poruku "explain", koristi tabs API da otvori stranicu u novom tabu.

Za debagovanje pozadinskog skripta možete otvoriti detalje proširenja i inspekciju servisnog radnika, što će otvoriti alatke za programere sa pozadinskim skriptom:

Stranice opcija i ostalo

Browser proširenja mogu sadržati različite vrste stranica:

  • Stranice akcija se prikazuju u padajućem meniju kada se klikne ikona proširenja.

  • Stranice koje će se učitati u novom tabu.

  • Stranice opcija: Ova stranica se prikazuje iznad proširenja kada se klikne. U prethodnom manifestu u mom slučaju mogao sam pristupiti ovoj stranici na chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca ili klikom na:

Imajte na umu da ove stranice nisu trajne poput pozadinskih stranica jer dinamički učitavaju sadržaj po potrebi. Ipak, dele određene mogućnosti sa pozadinskom stranicom:

  • Komunikacija sa skriptovima sadržaja: Slično kao pozadinska stranica, ove stranice mogu primati poruke od skriptova sadržaja, olakšavajući interakciju unutar proširenja.

  • Pristup API-jima specifičnim za proširenje: Ove stranice imaju sveobuhvatan pristup API-jima specifičnim za proširenje, podložan dozvolama definisanim za proširenje.

permissions & host_permissions

permissions i host_permissions su unosi iz manifest.json koji će ukazati na koje dozvole browser proširenje ima (skladište, lokacija...) i na kojim veb stranicama.

Kako browser proširenja mogu biti tako privilegovana, zlonamerno proširenje ili ono koje je kompromitovano može omogućiti napadaču različite načine za krađu osetljivih informacija i špijuniranje korisnika.

Proverite kako ove postavke funkcionišu i kako mogu biti zloupotrebljene u:

pageBrowExt - permissions & host_permissions

content_security_policy

Politika bezbednosti sadržaja se takođe može deklarisati unutar manifest.json. Ako je definisana, može biti ranjiva.

Podrazumevana postavka za stranice browser proširenja je prilično restriktivna:

script-src 'self'; object-src 'self';

Za više informacija o CSP i potencijalnim obilascima provere bezbednosti sadržaja, proverite:

pageContent Security Policy (CSP) Bypass

web_accessible_resources

da bi veb stranica mogla da pristupi stranici Browser Extension-a, na primer .html stranici, ova stranica mora biti navedena u polju web_accessible_resources u manifest.json fajlu. Na primer:

{
...
"web_accessible_resources": [
{
"resources": [ "images/*.png" ],
"matches": [ "https://example.com/*" ]
},
{
"resources": [ "fonts/*.woff" ],
"matches": [ "https://example.com/*" ]
}
],
...
}

Ove stranice su dostupne na URL-u poput:

chrome-extension://<extension-id>/message.html

U javnim proširenjima id proširenja je dostupan:

Međutim, ako se koristi parametar manifest.json use_dynamic_url, ovaj id može biti dinamičan.

Dozvola pristupa ovim stranicama čini ih potencijalno ranjivim na ClickJacking:

pageBrowExt - ClickJacking

Dozvoljavanje učitavanja ovih stranica samo od strane proširenja, a ne od nasumičnih URL-ova, moglo bi sprečiti CLickJacking napade.

externally_connectable

Prema dokumentaciji, manifest svojstvo "externally_connectable" deklariše koja proširenja i web stranice mogu da se povežu sa vašim proširenjem putem runtime.connect i runtime.sendMessage.

  • Ako ključ externally_connectable nije deklarisan u manifestu vašeg proširenja ili je deklarisan kao "ids": ["*"], sva proširenja mogu da se povežu, ali nijedna web stranica ne može.

  • Ako su specifični ID-ovi navedeni, kao u "ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"], samo te aplikacije mogu da se povežu.

  • Ako su navedeni odgovarajući podudarci, te veb aplikacije će moći da se povežu:

"matches": [
"https://*.google.com/*",
"*://*.chromium.org/*",
  • Ako je navedeno kao prazno: "externally_connectable": {}, nijedna aplikacija ili veb stranica neće moći da se poveže.

Što je manje ekstenzija i URL-ova navedeno ovde, to će površina napada biti manja.

Ako je veb stranica ranjiva na XSS ili preuzimanje kontrole navedena u externally_connectable, napadač će moći da šalje poruke direktno skripti pozadine, potpuno zaobilazeći Skriptu sadržaja i njegovu CSP.

Stoga, ovo je veoma moćna zaobilaznica.

Štaviše, ako klijent instalira zlonamernu ekstenziju, čak i ako mu nije dozvoljeno da komunicira sa ranjivom ekstenzijom, mogla bi da ubaci XSS podatke na dozvoljenu veb stranicu ili zloupotrebi WebRequest ili DeclarativeNetRequest API-je da manipuliše zahtevima na ciljanoj domeni menjajući zahtev za JavaScript fajl na stranici. (Imajte na umu da CSP na ciljanoj stranici može da spreči ove napade). Ova ideja potiče iz ovog teksta.

Komunikacija između Veb ↔︎ Skripte sadržaja

Okruženja u kojima skripte sadržaja funkcionišu i gde postoje stranice domaćini su odvojena jedno od drugog, obezbeđujući izolaciju. Uprkos ovoj izolaciji, oba imaju mogućnost da interaguju sa Document Object Model (DOM) stranice, deljenim resursom. Da bi stranica domaćin stupila u komunikaciju sa skriptom sadržaja, ili indirektno sa ekstenzijom preko skripte sadržaja, potrebno je koristiti DOM koji je dostupan obema stranama kao kanal komunikacije.

Poruke Post

content-script.js
var port = chrome.runtime.connect();

window.addEventListener("message", (event) => {
// We only accept messages from ourselves
if (event.source !== window) {
return;
}

if (event.data.type && (event.data.type === "FROM_PAGE")) {
console.log("Content script received: " + event.data.text);
port.postMessage(event.data.text);
}
}, false);
primer.js
document.getElementById("theButton").addEventListener("click", () => {
window.postMessage(
{type : "FROM_PAGE", text : "Hello from the webpage!"}, "*");
}, false);

Bezbedna komunikacija putem Post Message-a treba da proveri autentičnost primljene poruke, ovo se može uraditi proverom:

  • event.isTrusted: Ovo je tačno samo ako je događaj pokrenut akcijom korisnika

  • Content skript može očekivati poruku samo ako korisnik izvrši neku akciju

  • Poreklo domena: može očekivati poruku samo od liste odobrenih domena.

  • Ako se koristi regex, budite veoma oprezni

  • Izvor: received_message.source !== window se može koristiti da se proveri da li je poruka sa istog prozora gde Content skripta sluša.

Prethodne provere, čak i ako su izvršene, mogu biti ranjive, pa proverite na sledećoj stranici potencijalne Post Message obilaske:

pagePostMessage Vulnerabilities

Iframe

Još jedan mogući način komunikacije može biti putem Iframe URL-ova, možete pronaći primer u:

pageBrowExt - XSS Example

DOM

Ovo nije "tačno" način komunikacije, ali web i content skripta će imati pristup web DOM-u. Dakle, ako content skripta čita neke informacije iz njega, verujući web DOM-u, web bi mogao modifikovati te podatke (jer web ne bi trebalo da se veruje, ili jer je web ranjiv na XSS) i ugroziti Content skriptu.

Takođe možete pronaći primer DOM baziranog XSS za ugrožavanje browser ekstenzije u:

pageBrowExt - XSS Example

Osetljive informacije u memoriji/kodu

Ako Browser ekstenzija čuva osetljive informacije unutar svoje memorije, ovo bi moglo biti izvađeno (posebno na Windows mašinama) i pretraženo za te informacije.

Stoga, memorija Browser ekstenzije ne bi trebalo da se smatra bezbednom i osetljive informacije kao što su akreditacije ili mnemonične fraze ne bi trebalo da se čuvaju.

Naravno, ne stavljajte osetljive informacije u kod, jer će biti javne.

Da biste izvukli memoriju iz browsera, možete izvući memoriju procesa ili otići na postavke browser ekstenzije klikom na Inspect pop-up -> U odeljku Memory -> Napravite snimak i CTRL+F za pretragu unutar snimka za osetljive informacije.

Content Script ↔︎ Background Script Komunikacija

Content skripta može koristiti funkcije runtime.sendMessage() ili tabs.sendMessage() da pošalje jednokratnu JSON-serializabilnu poruku.

Za rukovanje odgovorom, koristite vraćeni Promise. Iako, radi kompatibilnosti unazad, i dalje možete proslediti callback kao poslednji argument.

Slanje zahteva iz content skripte izgleda ovako:

(async () => {
const response = await chrome.runtime.sendMessage({greeting: "hello"});
// do something with response here, not outside the function
console.log(response);
})();

Slanje zahteva iz ekstenzije (obično pozadinskog skripta) Skript sadržaja može koristiti funkcije, osim što morate navesti na koji tab da ga pošaljete. Primer kako poslati poruku skriptu sadržaja u izabranom tabu:

// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
(async () => {
const [tab] = await chrome.tabs.query({active: true, lastFocusedWindow: true});
const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
// do something with response here, not outside the function
console.log(response);
})();

Na primalacu, treba da postavite runtime.onMessage slušač događaja da biste obradili poruku. Ovo izgleda isto iz sadržajnog skripta ili stranice proširenja.

// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting === "hello")
sendResponse({farewell: "goodbye"});
}
);

U prikazanom primeru, sendResponse() je izvršen sinhrono. Da biste izmenili rukovaoca događajem onMessage za asinhrono izvršavanje sendResponse(), imperativno je uključiti return true;.

Važno je imati na umu da u scenarijima gde su više stranica postavljene da primaju događaje onMessage, prva stranica koja izvrši sendResponse() za određeni događaj će biti jedina sposobna da efikasno dostavi odgovor. Svi naknadni odgovori na isti događaj neće biti uzeti u obzir.

Prilikom kreiranja novih proširenja, prednost treba dati promisima umesto povratnim pozivima. Što se tiče korišćenja povratnih poziva, funkcija sendResponse() se smatra validnom samo ako se izvršava direktno unutar sinhronog konteksta, ili ako rukovalac događajem ukazuje na asinhronu operaciju vraćanjem true. Ukoliko nijedan od rukovalaca ne vrati true ili ako se funkcija sendResponse() ukloni iz memorije (sakupljena smećem), podrazumevano će biti pokrenut povratni poziv povezan sa funkcijom sendMessage().

Učitavanje proširenja u pregledaču

  1. Preuzmite Browser proširenje i raspakujte ga

  2. Idite na chrome://extensions/ i omogućite Developer Mode

  3. Kliknite na dugme Load unpacked

U Firefox-u idite na about:debugging#/runtime/this-firefox i kliknite na dugme Load Temporary Add-on.

Dobijanje izvornog koda iz prodavnice

Izvorni kod Chrome proširenja može se dobiti putem različitih metoda. U nastavku su detaljna objašnjenja i uputstva za svaku opciju.

Preuzimanje proširenja kao ZIP putem komandne linije

Izvorni kod Chrome proširenja može se preuzeti kao ZIP datoteka korišćenjem komandne linije. To uključuje korišćenje curl-a za preuzimanje ZIP datoteke sa određenog URL-a, a zatim izvlačenje sadržaja ZIP datoteke u direktorijum. Evo koraka:

  1. Zamenite "extension_id" sa stvarnim ID-om proširenja.

  2. Izvršite sledeće komande:

extension_id=your_extension_id   # Replace with the actual extension ID
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
unzip -d "$extension_id-source" "$extension_id.zip"

Koristite veb sajt CRX Viewer

https://robwu.nl/crxviewer/

Koristite CRX Viewer ekstenziju

Još jedan praktičan metod je korišćenje Chrome Extension Source Viewer, koji je open-source projekat. Može se instalirati sa Chrome Web prodavnice. Izvorni kod pregledača je dostupan u njegovom GitHub repozitorijumu.

Pregled izvora lokalno instalirane ekstenzije

Lokalno instalirane Chrome ekstenzije takođe mogu biti pregledane. Evo kako:

  1. Pristupite svom Chrome lokalnom profil direktorijumu posetom chrome://version/ i pronalaženjem polja "Profile Path".

  2. Navigirajte do Extensions/ podfoldera unutar profil direktorijuma.

  3. Ovaj folder sadrži sve instalirane ekstenzije, obično sa njihovim izvornim kodom u čitljivom formatu.

Da biste identifikovali ekstenzije, možete mapirati njihove ID-jeve sa imenima:

  • Omogućite Developer Mode na stranici about:extensions da biste videli ID-jeve svake ekstenzije.

  • Unutar svakog foldera ekstenzije, fajl manifest.json sadrži čitljivo polje name, što vam pomaže da identifikujete ekstenziju.

Koristite Arhiver ili Dekompresor fajlova

Idite na Chrome Web prodavnicu i preuzmite ekstenziju. Fajl će imati ekstenziju .crx. Promenite ekstenziju fajla sa .crx na .zip. Koristite bilo koji arhiver fajlova (kao što su WinRAR, 7-Zip, itd.) da biste izvukli sadržaj ZIP fajla.

Koristite Developer Mode u Chrome-u

Otvorite Chrome i idite na chrome://extensions/. Omogućite "Developer mode" u gornjem desnom uglu. Kliknite na "Load unpacked extension...". Navigirajte do direktorijuma vaše ekstenzije. Ovo ne preuzima izvorni kod, ali je korisno za pregledanje i modifikaciju koda već preuzete ili razvijene ekstenzije.

Lista za proveru bezbednosti

Iako Browser ekstenzije imaju ograničenu površinu napada, neke od njih mogu sadržati ranjivosti ili potencijalna poboljšanja učvršćivanja. Sledeće su najčešće:

Alati

  • Preuzima bilo koju Chrome ekstenziju sa pruženog linka Chrome web prodavnice.

  • manifest.json pregledač: jednostavno prikazuje JSON-oblikovanu verziju manifesta ekstenzije.

  • Analiza otiska prsta: Detekcija web_accessible_resources i automatsko generisanje JavaScript otiska prsta Chrome ekstenzije.

  • Potencijalna analiza Clickjacking-a: Detekcija HTML stranica ekstenzije sa direktivom web_accessible_resources. Ove stranice su potencijalno ranjive na clickjacking u zavisnosti od svrhe stranica.

  • Pregled upozorenja o dozvolama: koji prikazuje listu svih upozorenja o dozvolama Chrome prozora koje će biti prikazane prilikom pokušaja korisnika da instalira ekstenziju.

  • Opasne funkcije: prikazuje lokaciju opasnih funkcija koje bi mogle biti iskorišćene od strane napadača (npr. funkcije poput innerHTML, chrome.tabs.executeScript).

  • Ulazne tačke: prikazuje gde ekstenzija prihvata korisnički/spoljni unos. Ovo je korisno za razumevanje površine ekstenzije i traženje potencijalnih tačaka za slanje zlonamerno kreiranih podataka ekstenziji.

  • Za njihove generisane upozorenja, kako za Opasne funkcije tako i za Ulazne tačke, imaju sledeće:

  • Relevantni odlomak koda i linija koja je izazvala upozorenje.

  • Opis problema.

  • Dugme "Prikaži fajl" za pregled celog izvornog fajla koji sadrži kod.

  • Putanja upozorenog fajla.

  • Potpuna Chrome ekstenzija URI upozorenog fajla.

  • Tip fajla, kao što je skripta pozadine, Content Script, Browser Action, itd.

  • Ako je ranjiva linija u JavaScript fajlu, putanje svih stranica gde je uključena kao i status web_accessible_resource ovih stranica.

  • Analizator i provera zaobilaženja Content Security Policy (CSP): Ovo će ukazati na slabosti u CSP vaše ekstenzije i takođe osvetliti bilo koje potencijalne načine zaobilaženja vašeg CSP-a zbog belistovanih CDN-ova, itd.

  • Poznate ranjive biblioteke: Koristi Retire.js da proveri da li se koristi bilo koja poznata ranjiva JavaScript biblioteka.

  • Preuzmite ekstenziju i formatirane verzije.

  • Preuzmite originalnu ekstenziju.

  • Preuzmite prelepo formatiranu verziju ekstenzije (automatski oblikovan HTML i JavaScript).

  • Automatsko keširanje rezultata skeniranja, pokretanje skeniranja ekstenzije će trajati prilično dugo prvi put kada ga pokrenete. Međutim, drugi put, pod uslovom da ekstenzija nije ažurirana, biće gotovo trenutno zbog keširanja rezultata.

  • Linkabilni URL-ovi izveštaja, lako povežite nekoga sa izveštajem o ekstenziji generisanim od strane tarnish-a.

Projekat Neto je Python 3 paket osmišljen za analizu i otkrivanje skrivenih funkcija browser dodataka i ekstenzija za poznate pretraživače poput Firefox-a i Chrome-a. Automatizuje proces otpakivanja zapakovanih fajlova kako bi izvukao ove funkcije iz relevantnih resursa u ekstenziji poput manifest.json, lokalizacionih foldera ili JavaScript i HTML izvornih fajlova.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Druge načine podrške HackTricks-u:

Last updated