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)
Servisni radnik 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. Detaljne informacije o servisnim radnicima možete pronaći ovde. Iskorišćavanjem servisnih radnika unutar ranjivog web domena, napadači mogu preuzeti kontrolu nad interakcijama žrtve sa svim stranicama unutar tog domena.
Postojeći servisni radnici mogu se proveriti u sekciji Servisni radnici na Aplikacija tabu u Alatima za programere. Druga metoda je poseta chrome://serviceworker-internals za detaljniji pregled.
Dozvole za push obaveštenja direktno utiču na sposobnost servisnog radnika da komunicira sa serverom bez direktne interakcije korisnika. Ako su dozvole odbijene, to ograničava potencijal servisnog radnika 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 servisnog radnika 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 zlonamernog servisnog radnika.
U sledećem primeru ću predstaviti kod za registraciju novog servisnog radnika koji će slušati fetch
događaj i slati napadačevom 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 život malignog 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:
Dom ClobberingAko je URL/domen koji SW koristi za pozivanje importScripts
unutar HTML elementa, moguće je modifikovati ga putem DOM Clobbering da SW učita 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)