Abusing Service Workers
Try Hard Security Group
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. 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 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):
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:
U slučaju zloupotrebe ranjive JSONP tačke, trebalo bi da stavite vrednost unutar var sw
. Na primer:
Postoji C2 posvećen eksploataciji servisnih radnika nazvan Shadow Workers 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 za brzo deaktiviranje.
Zloupotreba importScripts
u SW putem DOM Clobbering
importScripts
u SW putem DOM ClobberingFunkcija 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
sw.js
Sa DOM Clobbering-om
Za više informacija o tome šta je DOM Clobbering, pogledajte:
pageDom ClobberingAko 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
Try Hard Security Group
Last updated