Ένας σύνδεσμος κοινής χρήσης του ChatGPT ήταν αρκετός για να αδειάσει τα ιδιωτικά δεδομένα όποιου συνδεδεμένου χρήστη τον άνοιγε. Το ίδιο κόλπο θα μπορούσε να κάνει ενέργειες στο όνομά του. Την επίθεση περιγράφει η Parameter Labs, και τη σημείωσε στο blog του ο προγραμματιστής Simon Willison.
Το κενό βρισκόταν στις «προεπισκοπήσεις HTML», το χαρακτηριστικό που εμφανίζει μέσα στη συνομιλία διαδραστικές μικροεφαρμογές. Η OpenAI το έλεγε παλιότερα Canvas. Ο κώδικάς τους τρέχει σε ένα απομονωμένο πλαίσιο (sandboxed iframe), ώστε να μην αγγίζει την υπόλοιπη σελίδα. Αν η απομόνωση σπάσει, ξένος κώδικας φτάνει στα δεδομένα του λογαριασμού.
Τέσσερα βήματα, κανένα από μόνο του μοιραίο
Η επίθεση δεν στηρίχθηκε σε ένα μεγάλο λάθος. Ήταν αλυσίδα από μικρά.
- Το ChatGPT χρησιμοποιεί τη βιβλιοθήκη MathLive για τα γραφήματα. Η βιβλιοθήκη έχει δικό της εικονικό πληκτρολόγιο, που η γονική σελίδα ενεργοποιεί με μηνύματα (postMessage) από το απομονωμένο πλαίσιο.
- Ο κώδικας που λαμβάνει το μήνυμα χρησιμοποιεί την εντολή innerHTML. Όποιος στέλνει μήνυμα μπορεί έτσι να βάλει δικό του HTML στη γονική σελίδα. Κανένας μηχανισμός δεν εμπόδιζε άλλα πλαίσια, και τις προεπισκοπήσεις HTML, να καλέσουν αυτή τη λειτουργία.
- Η innerHTML δεν εκτελεί άμεσα στοιχεία script. Μπορούσε όμως να εισαγάγει ένα νέο πλαίσιο χωρίς περιορισμούς απομόνωσης.
- Οι κανόνες CSP της OpenAI μπλόκαραν εντελώς τα ενσωματωμένα scripts και επέτρεπαν φόρτωση μόνο από λίγους τομείς. Ένας ήταν το YouTube, και το σημείο oEmbed του επέστρεφε JavaScript με τρόπο που εκτελούνταν.
Από τον κώδικα στα προσωπικά δεδομένα
Με JavaScript να τρέχει μέσα στο ChatGPT, το υπόλοιπο ήταν «τετριμμένο», όπως γράφει ο Willison. Ο κώδικας μπορούσε να διαβάσει ιδιωτικά δεδομένα του χρήστη από τα API και να τα στείλει έξω μέσω μιας αναφοράς εικόνας.
Το αποτέλεσμα: ο επιτιθέμενος δημιουργούσε έναν σύνδεσμο κοινής χρήσης. Όταν τον επισκεπτόταν άλλος συνδεδεμένος χρήστης, ο κώδικας έκλεβε τα δεδομένα του ή έκανε ενέργειες εκ μέρους του.
Η OpenAI έκλεισε το κενό και πλήρωσε 5.000 δολάρια μέσω του προγράμματος bug bounty, δηλαδή της αμοιβής που δίνουν οι εταιρείες σε όποιον αναφέρει ευπάθειες. Ο Willison θεωρεί το ποσό «λίγο φτηνό» για τόσο σοβαρή ευπάθεια.
Πηγή: Simon Willison’s Weblog



