Η αρχιτεκτονική διάσταση της ευπάθειας

Η ασφάλεια σύγχρονων web εφαρμογών βασίζεται σε αυστηρά όρια απομόνωσης (sandboxing) και πολιτικές ασφαλείας όπως η πολιτική περιορισμού περιεχομένου (Content Security Policy - CSP). Ωστόσο, η παρούσα ανακάλυψη αποδεικνύει ότι η ασφάλεια ενός συστήματος εξαρτάται από τον ασθενέστερο κρίκο στις γέφυρες επικοινωνίας μεταξύ απομονωμένων στοιχείων.

Στην προκειμένη περίπτωση, το ChatGPT διέθετε σωστό διαχωρισμό για τα HTML Previews σε ξεχωριστά origins. Η αρχιτεκτονική αστοχία εντοπίστηκε στο σημείο όπου δύο φαινομενικά άσχετες λειτουργίες —ένα διαδραστικό γράφημα που φόρτωνε τη βιβλιοθήκη MathLive και η δυνατότητα προεπισκόπησης κώδικα— συνδέθηκαν μέσω απροσεξίας στη διαχείριση μηνυμάτων.

Η υπέρβαση των ορίων μέσω postMessage και MathLive

Η επικοινωνία μεταξύ διαφορετικών πλαισίων (frames) στο web πραγματοποιείται συνήθως μέσω της διεπαφής postMessage. Ο δέκτης αυτών των μηνυμάτων οφείλει να επαληθεύει αυστηρά τόσο την προέλευση (origin) όσο και την ταυτότητα του παραθύρου αποστολής.

Η βιβλιοθήκη MathLive αποδεχόταν μηνύματα για την ενημέρωση ρυθμίσεων εικονικού πληκτρολογίου χωρίς να ελέγχει τον αποστολέα, εφαρμόζοντας πολιτική origin ίση με none. Επιπλέον, επέτρεπε την εισαγωγή ακατέργαστης HTML στη διάταξη του πληκτρολογίου. Αυτή η παράλειψη επέτρεψε σε ένα απομονωμένο Preview να εγχύσει HTML στο κυρίως έγγραφο του ChatGPT μέσω του innerHTML sink, παρακάμπτοντας τον μηχανισμό καθαρισμού (sanitization) καθώς χρησιμοποιήθηκε απλός περιτυλιγμένος μηχανισμός Trusted Types αντί για πραγματοποίηση ασφαλούς καθαρισμού.

Παράκαμψη του CSP και εκτέλεση JavaScript

Η έγχυση HTML επέτρεψε τη δημιουργία ενός iframe με τη χρήση του χαρακτηριστικού srcdoc, το οποίο κληρονόμησε την ταυτότητα της διεύθυνσης chatgpt.com χωρίς περιορισμούς sandbox. Παρότι το CSP εμπόδιζε την εκτέλεση inline JavaScript, επέτρεπε τη φόρτωση σεναρίων από το domain του YouTube.

Αξιοποιώντας ένα JSONP endpoint του YouTube το οποίο επέστρεφε το όνομα του callback ακόμη και σε περιπτώσεις σφάλματος, οι ερευνητές κατάφεραν να φορτώσουν και να εκτελέσουν αυθαίρετο κώδικα JavaScript. Αυτός ο κώδικας εκτελούνταν με τα πλήρη δικαιώματα τουauthenticated χρήστη, καθιστώντας δυνατή την κλήση των backend API για την ανάκτηση ιδιωτικών συνομιλιών και την εξαγωγή τους σε εξωτερικό εξυπηρετητή (server) μέσω απλών αιτημάτων εικόνας.