Abusing Service Workers
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Service worker je skripta koju vaš pregledač pokreće u pozadini, odvojeno od bilo koje web stranice, omogućavajući funkcije koje ne zahtevaju web stranicu ili interakciju korisnika, čime se poboljšavaju offline i pozadinske obrade mogućnosti. Detaljne informacije o service worker-ima možete pronaći ovde. Iskorišćavanjem service worker-a unutar ranjave web domene, napadači mogu preuzeti kontrolu nad interakcijama žrtve sa svim stranicama unutar te domene.
Postojeći service worker-i mogu se proveriti u sekciji Service Workers na Application tabu u Developer Tools. Druga metoda je poseta chrome://serviceworker-internals za detaljniji pregled.
Dozvole za push obaveštenja direktno utiču na sposobnost service worker-a da komunicira sa serverom bez direktne interakcije korisnika. Ako su dozvole odbijene, to ograničava potencijal service worker-a da predstavlja kontinuiranu pretnju. S druge strane, davanje dozvola povećava bezbednosne rizike omogućavanjem prijema i izvršavanja potencijalnih eksploatacija.
Da biste iskoristili ovu ranjivost, potrebno je da pronađete:
Način da otpremite proizvoljne JS datoteke na server i XSS za učitavanje service worker-a otpremljene JS datoteke
Ranjivu JSONP zahtev gde možete manipulisati izlazom (sa proizvoljnim JS kodom) i XSS da učitate JSONP sa payload-om koji će učitati zlonameran service worker.
U sledećem primeru ću predstaviti kod za registraciju novog service worker-a koji će slušati fetch
događaj i slati napadačkom serveru svaku preuzetu URL adresu (ovo je kod koji biste trebali otpremiti 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). U ovom slučaju, GET zahtev će biti poslat na server napadača obaveštavajući da li je registracija servisnog radnika bila uspešna ili ne:
U slučaju zloupotrebe ranjivog JSONP krajnjeg tačke, trebali biste staviti vrednost unutar var sw
. Na primer:
Postoji C2 posvećen iskorišćavanju Service Workers pod nazivom Shadow Workers koji će biti veoma koristan za zloupotrebu ovih ranjivosti.
Direktiva keširanja od 24 sata ograničava životni vek zlonamernog ili kompromitovanog service worker-a (SW) na najviše 24 sata nakon ispravke XSS ranjivosti, pod pretpostavkom online statusa klijenta. Da bi se smanjila ranjivost, operateri sajtova mogu smanjiti Time-To-Live (TTL) SW skripte. Takođe, programerima se savetuje da kreiraju service worker kill-switch za brzu deaktivaciju.
importScripts
u SW putem DOM Clobbering-aFunkcija importScripts
pozvana iz Service Worker-a može importovati skriptu iz druge domene. Ako se ova funkcija pozove koristeći parametar koji bi napadač mogao da izmeni, on bi mogao da importuje JS skriptu iz svoje domene i dobije XSS.
Ovo čak zaobilazi CSP zaštite.
Primer ranjivog koda:
index.html
sw.js
Za više informacija o tome šta je DOM Clobbering, pogledajte:
Ako je URL/domen koji SW koristi za pozivanje importScripts
unutar HTML elementa, moguće je modifikovati ga putem DOM Clobbering-a kako bi SW učitao skriptu sa vašeg domena.
Za primer ovog, pogledajte referentnu vezu.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)