SAML, κάτω από την κουκούλα: η υπογραφή μέσα στο γράμμα
Το SAML σας συνδέει σχεδόν σε κάθε εφαρμογή εργασίας και η υπογραφή του βρίσκεται μέσα στο XML που υπογράφει.
Το SAML σας συνδέει σχεδόν σε κάθε εφαρμογή εργασίας και η υπογραφή του βρίσκεται μέσα στο XML που υπογράφει. Κάτω από την κουκούλα: ο χορός σύνδεσης μεταξύ εφαρμογής, προγράμματος περιήγησης και παρόχου ταυτότητας, πώς μοιάζει μια επιβεβαίωση, γιατί η κανονικοποίηση πρέπει να συμφωνεί σε κάθε byte και γιατί η ίδια κατηγορία σφαλμάτων επανέρχεται συνεχώς από το 2012 έως το 2025. Προκλήθηκε από το "SAML: A fractal of bad design" των Trail of Bits (312 πόντοι στο Hacker News).
Διαβάστε την γραπτή έκδοση (Αγγλικά) ↗
Τι καλύπτει αυτό το βίντεο
- SAML: η σύνδεση που υπογράφει τον εαυτό της από μέσα
- 2002: τέσσερα format XML, μία επιτροπή, μια ολόκληρη βιομηχανία
- Ο χορός σύνδεσης: εφαρμογή → πάροχος ταυτότητας → πίσω μέσω του προγράμματος περιήγησής σας
- Η επιβεβαίωση: η υπογραφή βρίσκεται μέσα σε αυτό που υπογράφει
- Κανονικοποίηση: συμφωνήστε σε κάθε byte, αλλιώς κανείς δεν συνδέεται
Μεταφρασμένη μεταγραφή
Μεταφράστηκε από την πρωτότυπη αγγλική αφήγηση. Ο διαθέσιμος ήχος και οι υπότιτλοι ελέγχονται από το YouTube.
SAML: η σύνδεση που υπογράφει τον εαυτό της από μέσα
0:00 Το SAML είναι το XML που σας συνδέει σχεδόν σε κάθε εφαρμογή εργασίας που έχετε, και η υπογραφή του βρίσκεται μέσα στο έγγραφο που υπογράφει, σαν συμβολαιογράφος που καρφώνει τη σφραγίδα του μέσα στον φάκελο που σφραγίζει. Δέκα χρόνια αφότου μια επιτροπή το έγραψε, ερευνητές δοκίμασαν δεκατέσσερα SAML πλαίσια. Έντεκα απέτυχαν. Και αυτή την εβδομάδα μια ανάρτηση των Trail of Bits που το ονομάζει φράκταλ κακού σχεδιασμού έφτασε στην πρώτη σελίδα του Hacker News. Σε τρία λεπτά: πώς λειτουργεί ο χορός σύνδεσης, πού κρύβεται η υπογραφή,
0:27 και γιατί η λύση που όλοι συμφωνούν είναι ένα διαφορετικό πρωτόκολλο. Αυτό είναι το The Daily Diff, κάτω από την κουκούλα.
2002: τέσσερα format XML, μία επιτροπή, μια ολόκληρη βιομηχανία
0:34 Δύο χιλιάδες δύο. Μια επιτροπή ασφαλείας στην Oasis συγχωνεύει τέσσερις μορφές XML προμηθευτών σε μία. Τα πανεπιστήμια την υιοθετούν πρώτα, μετά η Okta χτίζει μια εταιρεία πάνω της, ο πιο γρήγορος τρόπος με τον οποίο ένα έγγραφο επιτροπής μετατράπηκε ποτέ σε έσοδα. Ανοίγετε την εφαρμογή.
Ο χορός σύνδεσης: εφαρμογή → πάροχος ταυτότητας → πίσω μέσω του προγράμματος περιήγησής σας
0:46 Δεν έχει ιδέα ποιος είστε, οπότε ανακατευθύνει το πρόγραμμα περιήγησής σας στον πάροχο ταυτότητας, π.χ. την Okta της εταιρείας σας. Συνδέεστε εκεί. Η Okta δίνει στο πρόγραμμα περιήγησής σας ένα υπογεγραμμένο έγγραφο XML που λέει ποιος είστε, και το πρόγραμμα περιήγησης το στέλνει πίσω.
Η επιβεβαίωση: η υπογραφή βρίσκεται μέσα σε αυτό που υπογράφει
0:59 Αυτό το έγγραφο είναι η επιβεβαίωση. Ονομάζει τον χρήστη, και η υπογραφή βρίσκεται μέσα του, δείχνοντας πίσω στην επιβεβαίωση μέσω του αναγνωριστικού της. Και όλο αυτό περνάει μέσω του προγράμματος περιήγησής σας, δηλαδή, μέσω του χρήστη. Για να το ελέγξει, η εφαρμογή
Κανονικοποίηση: συμφωνήστε σε κάθε byte, αλλιώς κανείς δεν συνδέεται
1:11 αναδομεί τα ακριβή bytes που υπογράφηκαν. Κόβει την υπογραφή, κανονικοποιεί τα κενά και τη σειρά των ιδιοτήτων, και κάνει hash το αποτέλεσμα. Αυτή είναι η κανονικοποίηση, και αν οι δύο πλευρές διαφωνήσουν έστω και για ένα byte, κανείς δεν συνδέεται. Ένα JSON web token το κάνει διαφορετικά. Κεφαλίδα, ωφέλιμο φορτίο και υπογραφή κάθονται δίπλα-δίπλα με τελείες ανάμεσα. Τίποτα για να κόψεις πρώτα.
2012: ο ελεγκτής και ο αναγνώστης κοιτούν διαφορετικά στοιχεία
1:32 Εδώ είναι το πρόβλημα. Ο κώδικας που ελέγχει την υπογραφή και ο κώδικας που διαβάζει το όνομα χρήστη είναι συχνά δύο διαφορετικά κομμάτια. Το 2012, μια εργασία με τίτλο On Breaking SAML έδειξε ότι μπορούσες να μετακινήσεις την υπογεγραμμένη επιβεβαίωση εκεί που ο αναγνώστης την αγνοεί, και να βάλεις μια δεύτερη εκεί που κοιτάει. Η Salesforce και το Shibboleth ήταν μεταξύ των έντεκα που την πάτησαν. Το 2018, η Duo έδειξε ότι ένα σχόλιο μέσα σε ένα όνομα χρήστη θα μπορούσε να κάνει ορισμένες
2018 και 2025: δύο parsers, δύο διαφορετικές απαντήσεις
1:55 βιβλιοθήκες να διαβάσουν μόνο το μισό όνομα, ενώ η υπογραφή εξακολουθούσε να ελέγχεται. Το 2025, η GitHub βρήκε δύο XML parsers μέσα στο ruby SAML να διαφωνούν για το ίδιο έγγραφο. Το ίδιο σφάλμα, νέα δεκαετία. Το Trail of Bits το αποκαλεί φράκταλ, γιατί σε κάθε επίπεδο που μεγεθύνεις έχει την
Γιατί συνεχίζει να χαλάει: ένα φράκταλ κακού σχεδιασμού
2:12 ίδια ατέλεια. Βασίζεται σε XML, η υπογραφή είναι εγκλωβισμένη, και οι πραγματικές συνδέσεις χρησιμοποιούν ίσως το ένα δέκατο της προδιαγραφής. Και η κορυφαία απάντηση στο Hacker News προέρχεται από τον αγοραστή. «Αν δεν έχετε υποστήριξη SAML, μπορώ να βρω ένα προϊόν που έχει.» Και τα δύο είναι αλήθεια, που είναι και το πρόβλημα. Λοιπόν, Δευτέρα. Στείλτε πρώτα το OpenID Connect, η Fly και η Tailscale πωλούν σε
Δευτέρα: OIDC πρώτα, μια συντηρούμενη βιβλιοθήκη, αυστηρά σχήματα
2:31 επιχειρήσεις χωρίς καθόλου SAML. Αν ένας πελάτης το επιβάλει, χρησιμοποιήστε μια συντηρούμενη βιβλιοθήκη, κρατήστε την ενημερωμένη, και απορρίψτε μηνύματα που δεν μοιάζουν με αυτά που στέλνουν η Okta ή η Google. Ποτέ μην γράφετε τον δικό σας έλεγχο υπογραφής.
Ετυμηγορία, κάτω από την κουκούλα: REVERT
2:43 Ετυμηγορία, κάτω από την κουκούλα. REVERT. Σχεδόν είκοσι πέντε χρόνια, μια κατηγορία σφαλμάτων που δεν πεθαίνει ποτέ, και η λύση στην οποία όλοι συμφωνούν είναι ένα διαφορετικό πρωτόκολλο. Το περασμένο Σάββατο διέλυσα τα passkeys, οπότε πείτε μου τι να ανοίξω μετά στα σχόλια. Και αυτή είναι η διαφορά για σήμερα. Είμαι ο Νίκος από την Axrisi. Συγχωνεύστε υπεύθυνα.
Πηγές
- Trail of Bits, "SAML: A fractal of bad design" (Matt Schwager, Sep 21, 2026)blog.trailofbits.com
- Hacker News threadnews.ycombinator.com
- Somorovsky et al., "On Breaking SAML: Be Whoever You Want to Be", USENIX Security 2012www.usenix.org
- Duo Labs, SAML vulnerabilities affecting multiple implementations (2018): https://duo.com/blog/duo-finds-saml-vulnerabilities-affecting-multiple-implementations · CERT VU#475445www.kb.cert.org
- GitHub Security Lab, "Sign in as anyone: Bypassing SAML SSO authentication with parser differentials" (Mar 12, 2025)github.blog



