Η αρχιτεκτονική του σφάλματος στο IPC
Το Telegram Desktop χρησιμοποιεί ένα τοπικό socket για την επικοινωνία μεταξύ μιας νέας διεργασίας (που εκκινείται από έναν σύνδεσμο) και της ήδη εκτελούμενης κύριας διεργασίας. Η σειριοποίηση (serialization) των δεδομένων βασίζεται σε έναν απλό διαχωριστή, το ερωτηματικό (;). Η ευπάθεια προέκυπτε από το γεγονός ότι ο διαχωριστής δεν διέθετε μηχανισμό διαφυγής (escaping), επιτρέποντας σε έναν επιτιθέμενο να «σπάσει» την εντολή και να εισάγει επιπλέον οδηγίες που εκτελούνταν από την κύρια διεργασία με αυξημένα προνόμια.
Το προνομιακό URI scheme 'interpret:'
Η ανακάλυψη του εσωτερικού URI scheme interpret: αποκάλυψε ένα σοβαρό κενό ασφαλείας. Το συγκεκριμένο scheme είχε σχεδιαστεί για την αυτοματοποίηση της δημοσίευσης ενημερώσεων από την ομάδα ανάπτυξης, επιτρέποντας την ανάγνωση αρχείων από τον δίσκο και την αποστολή τους σε κανάλια. Λόγω απουσίας ελέγχων εξουσιοδότησης (authorization checks), οποιοσδήποτε σύνδεσμος μπορούσε να επικαλεστεί αυτή τη λειτουργία, καθιστώντας το σύστημα αρχείων του χρήστη προσβάσιμο.
Διαδρομή προς την κατάληψη λογαριασμού
Ο επιτιθέμενος μπορούσε να συνδυάσει την έγχυση εντολών με την αυτόματη λήψη αρχείων. Στέλνοντας ένα αρχείο εντολών σε μια ομάδα, το Telegram το αποθήκευε αυτόματα σε γνωστή τοποθεσία. Στη συνέχεια, μέσω ενός συνδέσμου, ο επιτιθέμενος ανάγκαζε την εφαρμογή να διαβάσει τα κρίσιμα αρχεία της συνεδρίας (tdata). Εάν ο χρήστης δεν είχε ορίσει τοπικό κωδικό πρόσβασης (passcode), τα δεδομένα αυτά αρκούσαν για την αποκρυπτογράφηση και την πλήρη κλωνοποίηση του λογαριασμού.
Διορθωτικά μέτρα και θωράκιση
Η διόρθωση στο commit db3405699f (έκδοση 7.2.9) περιλαμβάνει:
- Την πλήρη κατάργηση του
interpret://scheme. - Την εισαγωγή μηχανισμού hex-encoding για τον διαχωριστή εντολών στο socket.
- Την προσθήκη φίλτρων που απορρίπτουν εντολές ελέγχου όταν συνυπάρχουν με εξωτερικά URL, περιορίζοντας δραστικά την επιφάνεια επίθεσης.