Cookie Tossing

Reading time: 5 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

Περιγραφή

Εάν ένας επιτιθέμενος μπορεί να ελέγξει μια υποτομέα ή το domain μιας εταιρείας ή βρει ένα XSS σε μια υποτομέα, θα είναι σε θέση να εκτελέσει αυτή την επίθεση.

Όπως αναφέρθηκε στην ενότητα Hacking Cookies, όταν ένα cookie ορίζεται σε ένα domain (καθορίζοντάς το) θα χρησιμοποιείται στο domain και στις υποτομείς.

caution

Επομένως, ένας επιτιθέμενος θα είναι σε θέση να ορίσει σε το domain και τις υποτομείς ένα συγκεκριμένο cookie κάνοντας κάτι όπως document.cookie="session=1234; Path=/app/login; domain=.example.com"

Αυτό μπορεί να είναι επικίνδυνο καθώς ο επιτιθέμενος μπορεί να είναι σε θέση να:

  • Σταθεροποιήσει το cookie του θύματος στον λογαριασμό του επιτιθέμενου έτσι ώστε αν ο χρήστης δεν το παρατηρήσει, να εκτελεί τις ενέργειες στον λογαριασμό του επιτιθέμενου και ο επιτιθέμενος μπορεί να αποκτήσει κάποιες ενδιαφέρουσες πληροφορίες (να ελέγξει την ιστορία των αναζητήσεων του χρήστη στην πλατφόρμα, το θύμα μπορεί να έχει ορίσει την πιστωτική του κάρτα στον λογαριασμό...)
  • Ένα παράδειγμα αυτού μπορεί να βρεθεί εδώ όπου ο επιτιθέμενος ορίζει το cookie του σε συγκεκριμένες ενότητες που θα χρησιμοποιήσει το θύμα για να εξουσιοδοτήσει πρόσβαση στα git repos του αλλά από τον λογαριασμό του επιτιθέμενου καθώς θα ορίζει τα cookies του στα απαραίτητα endpoints.
  • Εάν το cookie δεν αλλάξει μετά την είσοδο, ο επιτιθέμενος μπορεί απλά να σταθεροποιήσει ένα cookie (session-fixation), να περιμένει μέχρι το θύμα να συνδεθεί και στη συνέχεια να χρησιμοποιήσει αυτό το cookie για να συνδεθεί ως το θύμα.
  • Μερικές φορές, ακόμη και αν τα session cookies αλλάζουν, ο επιτιθέμενος χρησιμοποιεί το προηγούμενο και θα λάβει και το νέο.
  • Εάν το cookie ορίζει κάποια αρχική τιμή (όπως στο flask όπου το cookie μπορεί να ορίσει το CSRF token της συνεδρίας και αυτή η τιμή θα διατηρηθεί μετά την είσοδο του θύματος), ο επιτιθέμενος μπορεί να ορίσει αυτή τη γνωστή τιμή και στη συνέχεια να την εκμεταλλευτεί (σε αυτή την περίπτωση, ο επιτιθέμενος μπορεί να κάνει το χρήστη να εκτελέσει ένα CSRF αίτημα καθώς γνωρίζει το CSRF token).
  • Ακριβώς όπως η ρύθμιση της τιμής, ο επιτιθέμενος θα μπορούσε επίσης να αποκτήσει ένα μη αυθεντικοποιημένο cookie που δημιουργήθηκε από τον διακομιστή, να αποκτήσει το CSRF token από αυτό και να το χρησιμοποιήσει.

Όταν ένας περιηγητής λαμβάνει δύο cookies με το ίδιο όνομα που επηρεάζουν μερικώς την ίδια εμβέλεια (domain, υποτομείς και διαδρομή), ο περιηγητής θα στείλει και τις δύο τιμές του cookie όταν και οι δύο είναι έγκυρες για το αίτημα.

Ανάλογα με το ποιος έχει την πιο συγκεκριμένη διαδρομή ή ποιο είναι το παλαιότερο, ο περιηγητής θα ορίσει πρώτα την τιμή του cookie και στη συνέχεια την τιμή του άλλου όπως σε: Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;

Οι περισσότερες ιστοσελίδες θα χρησιμοποιούν μόνο την πρώτη τιμή. Έτσι, αν ένας επιτιθέμενος θέλει να ορίσει ένα cookie, είναι καλύτερο να το ορίσει πριν οριστεί άλλο ή να το ορίσει με μια πιο συγκεκριμένη διαδρομή.

warning

Επιπλέον, η δυνατότητα να ορίσετε ένα cookie σε μια πιο συγκεκριμένη διαδρομή είναι πολύ ενδιαφέρουσα καθώς θα μπορείτε να κάνετε τον θύμα να εργάζεται με το cookie του εκτός από την συγκεκριμένη διαδρομή όπου το κακόβουλο cookie θα σταλεί πρώτα.

Παράκαμψη Προστασίας

Μια πιθανή προστασία κατά αυτής της επίθεσης θα ήταν ότι ο διακομιστής ιστού δεν θα αποδέχεται αιτήματα με δύο cookies με το ίδιο όνομα αλλά με δύο διαφορετικές τιμές.

Για να παρακάμψει το σενάριο όπου ο επιτιθέμενος ορίζει ένα cookie αφού το θύμα έχει ήδη λάβει το cookie, ο επιτιθέμενος θα μπορούσε να προκαλέσει μια υπερχείλιση cookie και στη συνέχεια, μόλις το νόμιμο cookie διαγραφεί, να ορίσει το κακόβουλο.

Cookie Jar Overflow

Μια άλλη χρήσιμη παράκαμψη θα μπορούσε να είναι να URL encode το όνομα του cookie καθώς ορισμένες προστασίες ελέγχουν για 2 cookies με το ίδιο όνομα σε ένα αίτημα και στη συνέχεια ο διακομιστής θα αποκωδικοποιήσει τα ονόματα των cookies.

Μια επίθεση Cookie Tossing μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει μια Cookie Bomb επίθεση:

Cookie Bomb

Άμυνες

  • Εάν ένα όνομα cookie έχει αυτό το πρόθεμα, θα γίνεται αποδεκτό μόνο σε μια οδηγία Set-Cookie εάν είναι επισημασμένο ως Secure, έχει σταλεί από μια ασφαλή προέλευση, δεν περιλαμβάνει ένα χαρακτηριστικό Domain και έχει το χαρακτηριστικό Path ορισμένο σε /
  • Αυτό αποτρέπει τους υποτομείς από το να επιβάλλουν ένα cookie στο ανώτατο domain καθώς αυτά τα cookies μπορούν να θεωρηθούν ως "κλειδωμένα σε 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