Reverse Tab Nabbing

Support HackTricks

Περιγραφή

Σε μια κατάσταση όπου ένας επιτιθέμενος μπορεί να ελέγξει το href επιχείρημα μιας <a ετικέτας με το χαρακτηριστικό target="_blank" rel="opener" που πρόκειται να κλικάρει ένα θύμα, ο επιτιθέμενος δείχνει αυτό το σύνδεσμο σε μια ιστοσελίδα υπό τον έλεγχό του (μια κακόβουλη ιστοσελίδα). Στη συνέχεια, μόλις το θύμα κλικάρει το σύνδεσμο και αποκτήσει πρόσβαση στην ιστοσελίδα του επιτιθέμενου, αυτή η κακόβουλη ιστοσελίδα θα είναι σε θέση να ελέγξει την αρχική σελίδα μέσω του αντικειμένου javascript window.opener. Εάν η σελίδα δεν έχει rel="opener" αλλά περιέχει target="_blank" και δεν έχει rel="noopener" μπορεί επίσης να είναι ευάλωτη.

Ένας κανονικός τρόπος για να εκμεταλλευτεί κανείς αυτή τη συμπεριφορά θα ήταν να αλλάξει την τοποθεσία της αρχικής ιστοσελίδας μέσω window.opener.location = https://attacker.com/victim.html σε μια ιστοσελίδα που ελέγχεται από τον επιτιθέμενο και φαίνεται σαν την αρχική, έτσι ώστε να μπορεί να μιμηθεί τη φόρμα σύνδεσης της αρχικής ιστοσελίδας και να ζητήσει διαπιστευτήρια από τον χρήστη.

Ωστόσο, σημειώστε ότι καθώς ο επιτιθέμενος μπορεί τώρα να ελέγξει το αντικείμενο παραθύρου της αρχικής ιστοσελίδας μπορεί να το εκμεταλλευτεί με άλλους τρόπους για να εκτελέσει πιο διακριτικές επιθέσεις (ίσως τροποποιώντας γεγονότα javascript για να εξάγει πληροφορίες σε έναν διακομιστή που ελέγχει;)

Επισκόπηση

Με σύνδεσμο επιστροφής

Σύνδεσμος μεταξύ γονικών και παιδικών σελίδων όταν δεν χρησιμοποιείται το χαρακτηριστικό πρόληψης:

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png

Χωρίς σύνδεσμο επιστροφής

Σύνδεσμος μεταξύ γονικών και παιδικών σελίδων όταν χρησιμοποιείται το χαρακτηριστικό πρόληψης:

Παραδείγματα

Δημιουργήστε τις παρακάτω σελίδες σε έναν φάκελο και εκτελέστε έναν διακομιστή ιστού με python3 -m http.server Στη συνέχεια, πρόσβαση http://127.0.0.1:8000/vulnerable.html, κλικάρετε το σύνδεσμο και σημειώστε πώς η αρχική ιστοσελίδα URL αλλάζει.

vulnerable.html
<!DOCTYPE html>
<html>
<body>
<h1>Victim Site</h1>
<a href="http://127.0.0.1:8000/malicious.html" target="_blank" rel="opener">Controlled by the attacker</a>
</body>
</html>
malicious.html
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
malicious_redir.html
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

Προσιτές ιδιότητες

Στο σενάριο όπου συμβαίνει cross-origin πρόσβαση (πρόσβαση σε διαφορετικά domains), οι ιδιότητες της κλάσης JavaScript window, που αναφέρονται από την αναφορά αντικειμένου JavaScript opener, που μπορούν να προσπελαστούν από έναν κακόβουλο ιστότοπο περιορίζονται στα εξής:

  • opener.closed: Αυτή η ιδιότητα προσπελάζεται για να προσδιορίσει αν ένα παράθυρο έχει κλείσει, επιστρέφοντας μια boolean τιμή.

  • opener.frames: Αυτή η ιδιότητα παρέχει πρόσβαση σε όλα τα στοιχεία iframe εντός του τρέχοντος παραθύρου.

  • opener.length: Ο αριθμός των στοιχείων iframe που υπάρχουν στο τρέχον παράθυρο επιστρέφεται από αυτή την ιδιότητα.

  • opener.opener: Μια αναφορά στο παράθυρο που άνοιξε το τρέχον παράθυρο μπορεί να αποκτηθεί μέσω αυτής της ιδιότητας.

  • opener.parent: Αυτή η ιδιότητα επιστρέφει το γονικό παράθυρο του τρέχοντος παραθύρου.

  • opener.self: Πρόσβαση στο τρέχον παράθυρο παρέχεται από αυτή την ιδιότητα.

  • opener.top: Αυτή η ιδιότητα επιστρέφει το ανώτατο παράθυρο του προγράμματος περιήγησης.

Ωστόσο, σε περιπτώσεις όπου τα domains είναι ταυτόσημα, ο κακόβουλος ιστότοπος αποκτά πρόσβαση σε όλες τις ιδιότητες που εκτίθενται από την αναφορά αντικειμένου JavaScript window.

Πρόληψη

Οι πληροφορίες πρόληψης τεκμηριώνονται στο HTML5 Cheat Sheet.

Αναφορές

Support HackTricks

Last updated