Исследователи ExPatch обнаружили уязвимость типа Stored XSS в Telegram Desktop, которая позволяла внедрить JavaScript в HTML-экспорт переписки.
Особенность атаки в том, что вредоносное сообщение не обязательно должно находиться в группе вместе с ботом. Достаточно, чтобы сообщение с заражённой inline-кнопкой оказалось в истории чата, а пользователь позднее экспортировал переписку в HTML и открыл полученный файл.
Причина оказалась довольно простой. При формировании HTML Telegram Desktop обрабатывал текст сообщений через функцию SerializeString(), которая экранирует HTML-символы.
Но текст inline-кнопок записывался напрямую:
button.text.toUtf8()То есть содержимое кнопки не проходило необходимую санитизацию. В результате HTML, находящийся внутри text, мог интерпретироваться браузером как настоящий markup, включая JavaScript.
При обычном использовании Telegram это было незаметно: клиент отображал содержимое кнопки как обычный текст. Проблема возникала именно на этапе формирования HTML-файла, который затем открывался уже в браузере.
Злоумышленник создаёт сообщение с вредоносной inline-кнопкой. Такое сообщение может попасть в целевой чат через пересылку.
Далее пользователь спустя месяцы экспортирует историю переписки в HTML и открывает файл. В этот момент внедрённый код выполняется в контексте страницы.
Таким образом, между размещением payload и его выполнением может пройти очень много времени — сообщение фактически превращается в своеобразную «бомбу замедленного действия».
Согласно PoC исследователей, JavaScript получил доступ к данным, отображённым в экспортированной странице:
Кроме того, XSS позволяла изменять DOM страницы. Например, содержимое экспорта можно было заменить поддельной формой авторизации или визуально изменить отображаемую историю сообщений. При этом серверная история Telegram не изменялась — речь шла именно о содержимом открытой HTML-страницы.
Telegram исправил проблему в коммите 8457d13a, применив SerializeString() к тексту inline-кнопок.
Уязвимость была исправлена в Beta v6.9.4 и Stable v7.0.1. На момент публикации исследования публичного CVE для этой проблемы ещё не было.
Если у вас сохранились старые HTML-экспорты, созданные уязвимой версией Telegram Desktop, само обновление клиента не переписывает эти файлы. Поэтому с ними также стоит обращаться осторожно.
#Telegram #XSS #StoredXSS #WebSecurity #AppSec #CVE #Cybersecurity #InfoSec #BugBounty
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥2😁1