Уязвимость Telegram Desktop позволяла красть данные из экспорта чатов
В Telegram Desktop нашли уязвимость, которая позволяла браузеру выполнить JavaScript-код, скрытый в тексте кнопки, при открытии HTML-выгрузки чата. Исследователи из ExPatch Денис и Александр Ростиловы уточнили, что боту для этого не нужно было вступать в группу или получать доступ к её содержимому. Ошибка присутствовала в мессенджере до бета-версии v6.9.4 и стабильной v7.0.1. В более новых ошибку успешно исправили.
Telegram Desktop добавлял текст кнопок встроенной клавиатуры в HTML-файл без обработки опасных символов. Браузер принимал такой текст за разметку и мог выполнить JavaScript. Функция, которая защищала тексты сообщений и имена участников, не применялась к кнопкам. Поэтому тег `<script>` попадал в выгрузку без изменений.
В приложении Telegram код не выполнялся: текст кнопки показывался как обычная строка. Он срабатывал после открытия файла в браузере. Исследователи показали, что тег можно было спрятать невидимыми символами Hangul Filler. Кнопка выглядела пустой, а ссылка в ней могла вести на обычный сайт.
Бот создавал такое сообщение через Bot API, а затем пользователь пересылал его в группу. Если участник экспортировал чат с этим сообщением и открывал файл, скрипт запускался без клика. Он мог собрать текст переписки, имена отправителей, время сообщений, сведения о чате и путь к файлу. Эти сведения раскрывали имя пользователя операционной системы и структуру каталогов.
Код мог подменить страницу. В демонстрации выгрузка скрывалась, а вместо неё появлялась страница проверки, похожая на Telegram. Поля пароля были заблокированы, а на локальный адрес уходил тестовый адрес электронной почты. Авторы отметили, что этот приём можно было использовать для кражи учётных данных. Злоумышленник также мог менять время сообщений, имена отправителей и текст записей.
Ошибка касалась и ботов с включённым режимом приватности. Они не получали обычные сообщения группы через API, но их собственные сообщения с кнопками попадали в выгрузку. После открытия файла бот мог прочитать всю переписку на странице.
Авторы исследования оценили уязвимость в 8,2 балла по шкале CVSS 3.1. Они выбрали локальный вектор атаки, поскольку ошибка была в модуле выгрузки на компьютере пользователя. При сетевом векторе оценка составила бы 9,3 балла.
Вредоносное сообщение могло долго храниться в истории и распространяться через пересылку. В группах и супергруппах без защиты контента его мог переслать любой участник. Для публикации в канале потребовались бы права администратора.
Уязвимый код появился в феврале 2024 года и 8 марта вошёл в Telegram Desktop v4.15.1. Исправление подготовили в конце июня 2026 года. Ошибка присутствовала в коде около двух лет и четырёх месяцев. Первыми версиями с исправлением стали Beta v6.9.4 от 3 июля и стабильная v7.0.1 от 14 июля. Обновление не меняет старые HTML-файлы. Эксперты обнаружили ошибку 1 июня и направили отчёт в Telegram 3 июня. Компания подтвердила проблему спустя месяц и предложила вознаграждение. Авторы отказались от выплаты и попросили передать деньги на благотворительность.
