FixVibe
Covered by FixVibehigh

JWT Ασφάλεια: Κίνδυνοι μη ασφαλισμένων διακριτικών και επικύρωση αξίωσης που λείπει

Τα JSON Web Tokens (JWT) παρέχουν ένα πρότυπο για τη μεταφορά αξιώσεων, αλλά η ασφάλεια βασίζεται σε αυστηρή επικύρωση. Η αποτυχία επαλήθευσης υπογραφών, χρόνων λήξης ή σκοπούμενου κοινού επιτρέπει στους εισβολείς να παρακάμψουν τον έλεγχο ταυτότητας ή τα διακριτικά επανάληψης.

CWE-347CWE-287CWE-613

Επίδραση εισβολέα

Η ακατάλληλη επικύρωση 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].