10 KiB
Cookie Tossing
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Περιγραφή
Εάν ένας επιτιθέμενος μπορεί να ελέγξει ένα υποτομέα ή το τομέα μιας εταιρείας ή βρει ένα XSS σε έναν υποτομέα, θα είναι σε θέση να εκτελέσει αυτή την επίθεση.
Όπως αναφέρθηκε στην ενότητα Χάκινγκ Cookies, όταν ένα cookie ορίζεται σε έναν τομέα (καθορίζοντάς τον) θα χρησιμοποιείται στον τομέα και στους υποτομείς.
{% hint style="danger" %}
Επομένως, ένας επιτιθέμενος θα είναι σε θέση να ορίσει σε τον τομέα και στους υποτομείς ένα συγκεκριμένο cookie κάνοντας κάτι όπως document.cookie="session=1234; Path=/app/login; domain=.example.com"
{% endhint %}
Αυτό μπορεί να είναι επικίνδυνο καθώς ο επιτιθέμενος μπορεί να είναι σε θέση να:
- Σταθεροποιήσει το cookie του θύματος στον λογαριασμό του επιτιθέμενου έτσι ώστε αν ο χρήστης δεν το παρατηρήσει, θα εκτελεί τις ενέργειες στον λογαριασμό του επιτιθέμενου και ο επιτιθέμενος μπορεί να αποκτήσει κάποιες ενδιαφέρουσες πληροφορίες (να ελέγξει την ιστορία των αναζητήσεων του χρήστη στην πλατφόρμα, το θύμα μπορεί να έχει ρυθμίσει την πιστωτική του κάρτα στον λογαριασμό...)
- Εάν το cookie δεν αλλάξει μετά την είσοδο, ο επιτιθέμενος μπορεί απλά να σταθεροποιήσει ένα cookie (session-fixation), να περιμένει μέχρι το θύμα να συνδεθεί και στη συνέχεια να χρησιμοποιήσει αυτό το cookie για να συνδεθεί ως το θύμα.
- Μερικές φορές, ακόμη και αν τα session cookies αλλάζουν, ο επιτιθέμενος χρησιμοποιεί το προηγούμενο και θα λάβει και το νέο.
- Εάν το cookie ορίζει κάποια αρχική τιμή (όπως στο flask όπου το cookie μπορεί να ορίσει το CSRF token της συνεδρίας και αυτή η τιμή θα διατηρηθεί μετά την είσοδο του θύματος), ο επιτιθέμενος μπορεί να ορίσει αυτή τη γνωστή τιμή και στη συνέχεια να την εκμεταλλευτεί (σε αυτό το σενάριο, ο επιτιθέμενος μπορεί να κάνει τον χρήστη να εκτελέσει ένα CSRF αίτημα καθώς γνωρίζει το CSRF token).
- Ακριβώς όπως η ρύθμιση της τιμής, ο επιτιθέμενος θα μπορούσε επίσης να αποκτήσει ένα μη αυθεντικοποιημένο cookie που δημιουργήθηκε από τον διακομιστή, να αποκτήσει το CSRF token από αυτό και να το χρησιμοποιήσει.
Σειρά Cookie
Όταν ένας περιηγητής λαμβάνει δύο cookies με το ίδιο όνομα που επηρεάζουν μερικώς την ίδια εμβέλεια (τομέας, υποτομείς και διαδρομή), ο περιηγητής θα στείλει και τις δύο τιμές του cookie όταν και οι δύο είναι έγκυρες για το αίτημα.
Ανάλογα με το ποιος έχει την πιο συγκεκριμένη διαδρομή ή ποιο είναι το παλαιότερο, ο περιηγητής θα ορίσει πρώτα την τιμή του cookie και στη συνέχεια την τιμή του άλλου όπως στο: Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;
Οι περισσότερες ιστοσελίδες θα χρησιμοποιούν μόνο την πρώτη τιμή. Έτσι, αν ένας επιτιθέμενος θέλει να ορίσει ένα cookie, είναι καλύτερο να το ορίσει πριν από την ρύθμιση ενός άλλου ή να το ορίσει με μια πιο συγκεκριμένη διαδρομή.
{% hint style="warning" %} Επιπλέον, η δυνατότητα να ορίσετε ένα cookie σε μια πιο συγκεκριμένη διαδρομή είναι πολύ ενδιαφέρουσα καθώς θα μπορείτε να κάνετε τον θύμα να εργάζεται με το cookie του εκτός από την συγκεκριμένη διαδρομή όπου το κακόβουλο cookie θα έχει σταλεί πρώτα. {% endhint %}
Παράκαμψη Προστασίας
Μια πιθανή προστασία κατά αυτής της επίθεσης θα ήταν ότι ο διακομιστής ιστού δεν θα αποδέχεται αιτήματα με δύο cookies με το ίδιο όνομα αλλά με δύο διαφορετικές τιμές.
Για να παρακάμψει το σενάριο όπου ο επιτιθέμενος ορίζει ένα cookie αφού το θύμα έχει ήδη λάβει το cookie, ο επιτιθέμενος θα μπορούσε να προκαλέσει μια υπερχείλιση cookie και στη συνέχεια, μόλις το νόμιμο cookie διαγραφεί, να ορίσει το κακόβουλο.
{% content-ref url="cookie-jar-overflow.md" %} cookie-jar-overflow.md {% endcontent-ref %}
Μια άλλη χρήσιμη παράκαμψη θα μπορούσε να είναι να κωδικοποιήσει το όνομα του cookie καθώς ορισμένες προστασίες ελέγχουν για 2 cookies με το ίδιο όνομα σε ένα αίτημα και στη συνέχεια ο διακομιστής θα αποκωδικοποιήσει τα ονόματα των cookies.
Cookie Bomb
Μια επίθεση Cookie Tossing μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει μια Cookie Bomb επίθεση:
{% content-ref url="cookie-bomb.md" %} cookie-bomb.md {% endcontent-ref %}
Άμυνες
Χρησιμοποιήστε το πρόθεμα __Host
στο όνομα του cookie
- Εάν ένα όνομα cookie έχει αυτό το πρόθεμα, θα γίνεται αποδεκτό μόνο σε μια οδηγία Set-Cookie εάν είναι επισημασμένο ως Secure, έχει σταλεί από μια ασφαλή προέλευση, δεν περιλαμβάνει χαρακτηριστικό Domain και έχει το χαρακτηριστικό Path ρυθμισμένο σε /
- Αυτό αποτρέπει τους υποτομείς από το να επιβάλλουν ένα cookie στον κορυφαίο τομέα καθώς αυτά τα cookies μπορούν να θεωρηθούν ως "κλειδωμένα σε τομέα"
Αναφορές
- @blueminimal
- https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers
- https://github.blog/2013-04-09-yummy-cookies-across-domains/
- Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.