Επίδραση εισβολέα
Η ακατάλληλη επικύρωση JWT επιτρέπει στους εισβολείς να παρακάμψουν τους μηχανισμούς ελέγχου ταυτότητας πλαστογραφώντας αξιώσεις ή επαναχρησιμοποιώντας ληγμένα διακριτικά [S1]. Εάν ένας διακομιστής δέχεται διακριτικά χωρίς έγκυρη υπογραφή, ένας εισβολέας μπορεί να τροποποιήσει το ωφέλιμο φορτίο για να κλιμακώσει τα δικαιώματα ή να μιμηθεί οποιονδήποτε χρήστη [S1]. Επιπλέον, η αποτυχία επιβολής της αξίωσης λήξης (exp) επιτρέπει σε έναν εισβολέα να χρησιμοποιήσει ένα παραβιασμένο διακριτικό επ' αόριστον [S1].
Ριζική αιτία
Ένα JSON Web Token (JWT) είναι μια δομή που βασίζεται σε JSON που χρησιμοποιείται για την αναπαράσταση αξιώσεων που έχουν ψηφιακή υπογραφή ή προστασία ακεραιότητας [S1]. Οι αποτυχίες ασφάλειας συνήθως προέρχονται από δύο κύρια κενά εφαρμογής:
- Αποδοχή μη ασφαλών JWT: Εάν μια υπηρεσία δεν επιβάλλει αυστηρά την επαλήθευση υπογραφής, μπορεί να επεξεργαστεί "Μη ασφαλή JWT" όπου η υπογραφή απουσιάζει και ο αλγόριθμος έχει οριστεί σε "κανένα" [S1]. Σε αυτό το σενάριο, ο διακομιστής εμπιστεύεται τις αξιώσεις στο ωφέλιμο φορτίο χωρίς να επαληθεύει την ακεραιότητά τους [S1].
- Επικύρωση αξίωσης που λείπει: Η αξίωση
exp(χρόνος λήξης) προσδιορίζει το χρόνο κατά ή μετά τον οποίο το JWT δεν πρέπει να γίνει αποδεκτό για επεξεργασία [S1]. Η αξίωσηaud(κοινό) προσδιορίζει τους προβλεπόμενους παραλήπτες του διακριτικού [S1]. Εάν δεν είναι επιλεγμένα, ο διακομιστής μπορεί να αποδεχτεί διακριτικά που έχουν λήξει ή προορίζονταν για διαφορετική εφαρμογή [S1].
Διορθώσεις σκυροδέματος
- Εφαρμογή κρυπτογραφικών υπογραφών: Διαμορφώστε την εφαρμογή ώστε να απορρίπτει οποιοδήποτε JWT που δεν χρησιμοποιεί προεγκεκριμένο, ισχυρό αλγόριθμο υπογραφής (όπως RS256).
- Επικύρωση λήξης: Εφαρμόστε έναν υποχρεωτικό έλεγχο για να βεβαιωθείτε ότι η τρέχουσα ημερομηνία και ώρα είναι πριν από την ώρα που καθορίζεται στην αξίωση
exp[S1]. - Επαλήθευση κοινού: Βεβαιωθείτε ότι η αξίωση
audπεριέχει μια τιμή που προσδιορίζει την τοπική υπηρεσία. εάν η υπηρεσία δεν προσδιορίζεται στην αξίωσηaud, το διακριτικό πρέπει να απορριφθεί [S1]. - Αποτροπή επανάληψης: Χρησιμοποιήστε την αξίωση
jti(JWT ID) για να εκχωρήσετε ένα μοναδικό αναγνωριστικό σε κάθε διακριτικό, επιτρέποντας στον διακομιστή να παρακολουθεί και να απορρίπτει τα επαναχρησιμοποιημένα διακριτικά [S1].
Στρατηγική ανίχνευσης
Τα τρωτά σημεία στον χειρισμό JWT μπορούν να εντοπιστούν αναλύοντας τη δομή του διακριτικού και τη συμπεριφορά απόκρισης διακομιστή:
- Επιθεώρηση κεφαλίδας: Έλεγχος της κεφαλίδας
alg(αλγόριθμος) για να βεβαιωθείτε ότι δεν έχει οριστεί σε "none" και χρησιμοποιεί τα αναμενόμενα κρυπτογραφικά πρότυπα [S1]. - Επαλήθευση αξίωσης: Επιβεβαίωση της παρουσίας και της εγκυρότητας των αξιώσεων
exp(λήξη) καιaud(κοινό) εντός του ωφέλιμου φορτίου JSON [S1]. - Δοκιμή επικύρωσης: Έλεγχος εάν ο διακομιστής απορρίπτει σωστά τα διακριτικά που έχουν λήξει σύμφωνα με την αξίωση
expή προορίζονται για διαφορετικό κοινό όπως ορίζεται από την αξίωσηaud[S1].
