Abusing Service Workers
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ένας service worker είναι ένα σενάριο που εκτελείται από τον περιηγητή σας στο παρασκήνιο, ξεχωριστά από οποιαδήποτε ιστοσελίδα, επιτρέποντας δυνατότητες που δεν απαιτούν ιστοσελίδα ή αλληλεπίδραση χρήστη, ενισχύοντας έτσι τις δυνατότητες εκτός σύνδεσης και επεξεργασίας στο παρασκήνιο. Λεπτομερείς πληροφορίες σχετικά με τους service workers μπορείτε να βρείτε εδώ. Εκμεταλλευόμενοι τους service workers σε έναν ευάλωτο διαδικτυακό τομέα, οι επιτιθέμενοι μπορούν να αποκτήσουν έλεγχο πάνω στις αλληλεπιδράσεις του θύματος με όλες τις σελίδες εντός αυτού του τομέα.
Οι υπάρχοντες service workers μπορούν να ελεγχθούν στην ενότητα Service Workers της καρτέλας Application στα Developer Tools. Μια άλλη μέθοδος είναι να επισκεφθείτε το chrome://serviceworker-internals για μια πιο λεπτομερή προβολή.
Οι άδειες ειδοποιήσεων push επηρεάζουν άμεσα την ικανότητα ενός service worker να επικοινωνεί με τον διακομιστή χωρίς άμεση αλληλεπίδραση χρήστη. Εάν οι άδειες απορριφθούν, περιορίζει την ικανότητα του service worker να θέτει μια συνεχόμενη απειλή. Αντίθετα, η χορήγηση αδειών αυξάνει τους κινδύνους ασφαλείας επιτρέποντας την παραλαβή και εκτέλεση πιθανών εκμεταλλεύσεων.
Για να εκμεταλλευτείτε αυτήν την ευπάθεια πρέπει να βρείτε:
Έναν τρόπο να ανεβάσετε αυθαίρετα αρχεία JS στον διακομιστή και μια XSS για να φορτώσετε τον service worker του ανεβασμένου αρχείου JS
Ένα ευάλωτο αίτημα JSONP όπου μπορείτε να χειριστείτε την έξοδο (με αυθαίρετο κώδικα JS) και μια XSS για να φορτώσετε το JSONP με ένα payload που θα φορτώσει έναν κακόβουλο service worker.
Στο παρακάτω παράδειγμα θα παρουσιάσω έναν κώδικα για να καταχωρήσετε έναν νέο service worker που θα ακούει το γεγονός fetch
και θα στέλνει στον διακομιστή των επιτιθέμενων κάθε URL που ανακτάται (αυτός είναι ο κώδικας που θα χρειαστεί να ανεβάσετε στον διακομιστή ή να φορτώσετε μέσω μιας ευάλωτης JSONP απάντησης):
Και αυτός είναι ο κώδικας που θα καταχωρήσει τον εργαζόμενο (ο κώδικας που θα πρέπει να είστε σε θέση να εκτελέσετε εκμεταλλευόμενοι μια XSS). Σε αυτή την περίπτωση, θα σταλεί ένα GET αίτημα στον διακομιστή των επιτιθέμενων γνωστοποιώντας αν η καταχώρηση του service worker ήταν επιτυχής ή όχι:
Σε περίπτωση κατάχρησης ενός ευάλωτου JSONP endpoint, θα πρέπει να βάλετε την τιμή μέσα στο var sw
. Για παράδειγμα:
There is a C2 dedicated to the exploitation of Service Workers called Shadow Workers that will be very useful to abuse these vulnerabilities.
The 24-hour cache directive limits the life of a malicious or compromised service worker (SW) to at most 24 hours after an XSS vulnerability fix, assuming online client status. To minimize vulnerability, site operators can lower the SW script's Time-To-Live (TTL). Developers are also advised to create a service worker kill-switch for rapid deactivation.
importScripts
in a SW via DOM ClobberingThe function importScripts
called from a Service Worker can import a script from a different domain. If this function is called using a parameter that an attacker could modify he would be able to import a JS script from his domain and get XSS.
This even bypasses CSP protections.
Example vulnerable code:
index.html
sw.js
Για περισσότερες πληροφορίες σχετικά με το τι είναι το DOM Clobbering, ελέγξτε:
Dom ClobberingΕάν το URL/domain που χρησιμοποιεί το SW για να καλέσει importScripts
είναι μέσα σε ένα HTML στοιχείο, είναι δυνατό να το τροποποιήσετε μέσω του DOM Clobbering για να κάνετε το SW να φορτώσει ένα script από το δικό σας domain.
Για ένα παράδειγμα αυτού, ελέγξτε τον σύνδεσμο αναφοράς.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)