Telegram исправил уязвимость спустя два года. Старые HTML-экспорты всё ещё заражены
Обычный экспорт переписки из Telegram мог превратить сохранённую историю чата в инструмент для кражи сообщений. Исследователи обнаружили в Telegram Desktop уязвимость, позволявшую незаметно внедрять JavaScript в HTML-архивы переписки. Ошибка оставалась в клиенте около двух лет и четырёх месяцев, а созданные до исправления файлы могут представлять опасность даже после обновления Telegram.
Проблема относилась к классу хранимого XSS. Telegram Desktop умеет сохранять историю переписки в виде HTML-страниц, которые пользователь затем открывает обычным браузером. При создании файла приложение экранировало потенциально опасные символы в тексте сообщений, именах отправителей и других полях, но пропускало текст кнопок встроенной клавиатуры Telegram-ботов.
Из-за ошибки строка кнопки попадала в HTML без необходимой обработки. Бот мог поместить в название кнопки тег со скриптом, а Telegram Desktop записывал содержимое как рабочую HTML-разметку. В самом мессенджере вредоносный код не выполнялся, поскольку настольный и мобильные клиенты показывают текст кнопок через собственный интерфейс и не интерпретируют его как веб-страницу. Опасность появлялась позже, когда пользователь экспортировал переписку и открывал полученный файл в браузере.
Для доставки вредоносного сообщения боту даже не требовалось состоять в целевой группе. URL-кнопка сохранялась при пересылке, поэтому злоумышленник мог подготовить сообщение и добиться его пересылки в чужой чат. Вредоносная строка после попадания в историю могла храниться месяцами или годами, не проявляя себя до момента экспорта.
После открытия подготовленного HTML-файла дополнительный клик уже не требовался. JavaScript получал доступ к содержимому загруженной страницы и мог собирать текст сообщений, имена отправителей, время публикации, название и тип чата, а затем отправлять сведения на внешний сервер. Скрипт также мог полностью менять отображаемую страницу, подменять сообщения, даты и имена либо показывать фальшивую форму авторизации. Изменения затрагивали отображение архива в браузере, а не исходную переписку на серверах Telegram.
Особую проблему создавала модель доступа Telegram-ботов. Бот с включённым режимом конфиденциальности обычно не видит обычную переписку группы и старую историю. Вредоносное сообщение позволяло обойти границу уже после экспорта: код запускался внутри браузера пользователя и получал доступ ко всем сообщениям, находившимся на открытой HTML-странице. Исследователи оценили серьёзность проблемы в 8,2 балла по CVSS 3.1.
Уязвимый код появился в Telegram Desktop 4.15.1 в марте 2024 года. Исследователи Денис Ростилов и Александр Ростилов обнаружили проблему 1 июня 2026 года и спустя два дня отправили Telegram описание, демонстрацию и рабочую проверку концепции. Разработчики подготовили исправление 30 июня, а 2 июля изменение попало в репозиторий Telegram Desktop. Патч добавил недостающее экранирование текста кнопок и одновременно закрыл дополнительный путь для внедрения кода через обработчик кнопки копирования.
Первая исправленная тестовая версия Telegram Desktop 6.9.4 вышла 3 июля 2026 года, стабильная версия 7.0.1 появилась 14 июля. Пользователям достаточно установить Telegram Desktop 7.0.1 или более свежую сборку, чтобы новые экспорты корректно обрабатывали текст кнопок.
Обновление клиента не обезвреживает HTML-файлы, созданные раньше. Если старый архив уже содержит сообщение с вредоносной кнопкой, JavaScript остаётся внутри файла и может запуститься при следующем открытии. Исследователи советуют заново экспортировать нужные переписки после обновления Telegram Desktop. Старые HTML-архивы при необходимости лучше открывать с отключённым JavaScript, особенно если файл содержит историю большой группы с большим количеством пересланных сообщений.
Telegram подтвердил отчёт 1 июля и предложил исследователям вознаграждение в размере $500. Авторы отказались от выплаты и попросили направить деньги на благотворительность. По опубликованной переписке, Telegram также отказался согласовывать публичное раскрытие подробностей даже после выпуска исправления, сославшись на риск будущих злоупотреблений. На момент публикации исследования 12 сентября отдельного бюллетеня безопасности Telegram и номера CVE у уязвимости не было.