Исследователи ExPatch обнаружили уязвимость типа stored XSS в функции HTML-экспорта десктопной версии Telegram.
Суть в том, что, в отличие от текста сообщений (обрабатывался через
SerializeString()), содержимое inline-кнопок не экранировалось. Поэтому управляемое значение могло выйти из текстового контекста HTML и стать активным элементом страницы.Все просто:
▶️ Бот формирует inline-кнопку с внедренным JavaScript.
▶️ Сообщение попадает в целевой чат, например через пересылку (самому боту необязательно иметь доступ к целевому чату).
▶️ Десктопный клиент сохраняет текст кнопки в HTML без экранирования.
▶️ Пользователь экспортирует историю переписки в HTML.
▶️ Пользователь открывает файл в браузере.
▶️ XSS срабатывает при открытии зараженного HTML-файла в браузере с разрешенным JavaScript
▶️ Скрипт читает DOM экспортированной переписки.
▶️ Данные отправляются на C2.
Уязвимость исправили в Telegram Desktop 6.9.4 Beta и 7.0.1 Stable. Но старые HTML-экспорты обновление не обезвреживает, так что их надо считать недоверенными и не открывать в браузере.
Кстати, там Telegram исправил попутно еще один вектор — JS-инъекцию в
onclick="return ShowTextCopied('…')" для copy-callback-кнопок. Там сейчас экранируются \ и '.➡️ Подробности
#red_team #Telegram
