Abusing Service Workers
Try Hard Security Group
Βασικές Πληροφορίες
Ένας service worker είναι ένα σενάριο που εκτελείται από τον περιηγητή σας στο παρασκήνιο, ξεχωριστά από οποιαδήποτε ιστοσελίδα, επιτρέποντας χαρακτηριστικά που δεν απαιτούν ιστοσελίδα ή αλληλεπίδραση χρήστη, βελτιώνοντας έτσι τις δυνατότητες εκτέλεσης εκτός σύνδεσης και στο παρασκήνιο. Λεπτομερείς πληροφορίες για τους service workers μπορούν να βρεθούν εδώ. Εκμεταλλευόμενοι τους service workers σε ένα ευάλωτο τομέα ιστοσελίδας, οι επιτιθέμενοι μπορούν να αποκτήσουν έλεγχο επί των αλληλεπιδράσεων του θύματος με όλες τις σελίδες εντός αυτού του τομέα.
Έλεγχος για Υπάρχοντες Service Workers
Οι υπάρχοντες service workers μπορούν να ελεγχθούν στην ενότητα Service Workers της καρτέλας Εφαρμογή στα Εργαλεία Προγραμματιστή. Ένας άλλος τρόπος είναι να επισκεφθείτε τη διεύθυνση chrome://serviceworker-internals για μια πιο λεπτομερή προβολή.
Ειδοποιήσεις Πατήστε
Οι άδειες ειδοποιήσεων πατήστε επηρεάζουν απευθείας την ικανότητα ενός service worker να επικοινωνήσει με τον διακομιστή χωρίς άμεση αλληλεπίδραση χρήστη. Αν οι άδειες αρνηθούν, περιορίζουν τη δυνατότητα του service worker να αποτελέσει συνεχή απειλή. Αντίστοιχα, η χορήγηση άδειων αυξάνει τους κινδύνους ασφαλείας ενεργοποιώντας τη λήψη και εκτέλεση πιθανών εκμεταλλεύσεων.
Επίθεση Δημιουργίας Service Worker
Για να εκμεταλλευτείτε αυτήν την ευπάθεια χρειάζεστε να βρείτε:
Έναν τρόπο να ανεβάσετε αυθαίρετα αρχεία JS στον διακομιστή και ένα XSS για να φορτώσετε τον service worker του ανεβασμένου αρχείου JS
Ένα ευάλωτο αίτημα JSONP όπου μπορείτε να διαμορφώσετε την έξοδο (με αυθαίρετο κώδικα JS) και ένα XSS για να φορτώσετε το JSONP με ένα φορτίο που θα φορτώσει ένα κακόβουλο service worker.
Στο παρακάτω παράδειγμα θα παρουσιάσω κώδικα για εγγραφή ενός νέου service worker που θα ακούει το συμβάν fetch
και θα στέλνει στον διακομιστή των επιτιθέμενων κάθε φορτωμένο URL (αυτός είναι ο κώδικας που θα χρειαζόσασταν να ανεβάσετε στον διακομιστή ή να φορτώσετε μέσω μιας ευάλωτης απάντησης JSONP):
Και αυτός είναι ο κώδικας που θα καταχωρίσει τον εργαζόμενο (ο κώδικας που πρέπει να μπορείτε να εκτελέσετε καταχρηστικά ένα XSS). Σε αυτήν την περίπτωση θα σταλεί ένα αίτημα GET στον επιτιθέμενο διακομιστή ειδοποιώντας αν η καταχώριση του service worker ήταν επιτυχής ή όχι:
Σε περίπτωση κατάχρησης ενός ευάλωτου σημείου JSONP, πρέπει να τοποθετήσετε την τιμή μέσα στο var sw
. Για παράδειγμα:
Υπάρχει ένα C2 αφιερωμένο στην εκμετάλλευση των Service Workers που ονομάζεται Shadow Workers που θα είναι πολύ χρήσιμο για την κατάχρηση αυτών των ευπαθειών.
Η οδηγία cache 24 ωρών περιορίζει τη διάρκεια ζωής ενός κακόβουλου ή παραβιασμένου service worker (SW) σε το πολύ 24 ώρες μετά από μια επιδιόρθωση ευπαθειών XSS, υποθέτοντας online κατάσταση πελάτη. Για να μειώσουν την ευπαθεια, οι χειριστές ιστότοπων μπορούν να μειώσουν τον χρόνο ζωής (TTL) του script του SW. Συνιστάται επίσης στους προγραμματιστές να δημιουργήσουν ένα service worker kill-switch για γρήγορη απενεργοποίηση.
Κατάχρηση του importScripts
σε ένα SW μέσω DOM Clobbering
importScripts
σε ένα SW μέσω DOM ClobberingΗ λειτουργία importScripts
που καλείται από ένα Service Worker μπορεί να εισάγει ένα script από διαφορετικό τομέα. Εάν αυτή η λειτουργία καλείται χρησιμοποιώντας ένα παράμετρο που μπορεί να τροποποιήσει ένας επιτιθέμενος, θα μπορούσε να εισάγει ένα JS script από τον δικό του τομέα και να λάβει XSS.
Αυτό ακόμη παρακάμπτει τις προστασίες CSP.
Παράδειγμα ευπαθούς κώδικα:
index.html
sw.js
Με DOM Clobbering
Για περισσότερες πληροφορίες σχετικά με το τι είναι το DOM Clobbering, ελέγξτε:
pageDom ClobberingΑν ο URL/domain όπου το SW χρησιμοποιείται για να καλέσει το importScripts
βρίσκεται μέσα σε ένα στοιχείο HTML, είναι δυνατό να το τροποποιήσετε μέσω DOM Clobbering για να κάνετε το SW να φορτώσει ένα script από τον δικό σας τομέα.
Για ένα παράδειγμα αυτού, ελέγξτε το σύνδεσμο αναφοράς.
Αναφορές
Try Hard Security Group
Last updated