Dans Telegram, le message avait l’air normal. Le code malveillant ne s’exécutait pas non plus dans l’application. Il pouvait rester dormant pendant des mois dans l’historique, jusqu’au jour où un utilisateur exportait la conversation en HTML et ouvrait le fichier dans son navigateur. À ce moment-là, le JavaScript caché pouvait lire et exfiltrer les messages présents dans l’archive.
Le piège était caché dans un bouton
La vulnérabilité se trouvait dans la fonction d’export HTML de Telegram Desktop. Les chercheurs d’ExPatch ont découvert qu’un bot pouvait placer du code HTML ou JavaScript dans le texte d’un bouton associé à un message. Dans l’application Telegram elle-même, ce contenu restait inoffensif : le client affiche le texte du bouton sans interpréter le HTML.
Le problème apparaissait au moment de l’export. Telegram neutralisait bien les caractères dangereux dans le texte des messages, les noms d’expéditeur et d’autres champs, mais pas dans celui des boutons. Le navigateur pouvait donc interpréter le contenu comme du véritable code lorsqu’il ouvrait ensuite le fichier HTML. Une seule fonction de nettoyage manquait dans le code.
Le message pouvait dormir pendant des mois
Le mécanisme avait une particularité puisque le bot malveillant n’avait même pas besoin d’appartenir au groupe ciblé. Un message contenant le bouton pouvait être créé ailleurs puis transféré dans une conversation. Le code restait alors enfoui dans l’historique sans s’exécuter. Si, plusieurs mois plus tard, un membre exportait cette conversation en HTML et ouvrait le fichier, le script se lançait.
Dans leur démonstration, ExPatch montre qu’il pouvait lire tous les messages affichés dans l’archive, leur expéditeur et leur horodatage, puis les envoyer vers un serveur contrôlé par l’attaquant. Le contenu de la page pouvait également être entièrement réécrit, par exemple pour afficher un faux formulaire Telegram. La faille était présente depuis mars 2024.
Les anciens exports restent vulnérables
Telegram a corrigé le problème cet été en appliquant au texte des boutons le même mécanisme d’échappement HTML que pour le reste des messages. Le correctif est intégré à Telegram Desktop 6.9.4 Beta depuis le 3 juillet et à la version stable 7.0.1 depuis le 14 juillet, selon la chronologie publiée par ExPatch.
Mais la mise à jour du logiciel ne modifie pas les fichiers déjà présents sur le disque. Un export HTML créé auparavant peut donc encore contenir un script dormant. Les chercheurs recommandent de recréer ces archives avec une version corrigée de Telegram Desktop ou, à défaut, de ne les ouvrir qu’avec JavaScript désactivé.





