TGViewer
Codeby Codeby @codeby_sec · 37K subscribers
Post #10447 2.49K
✈️ Telegram Desktop — Stored XSS в экспорте HTML

Исследователи 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 получил доступ к данным, отображённым в экспортированной странице:
⏺️ текст сообщений, отправителей и временные метки;
⏺️ название и метаданные чата;
⏺️ содержимое всей HTML-страницы;
⏺️ локальный путь к открытому файлу.

Кроме того, 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

🔗 Все наши каналы 🔁 Все наши чаты 🪧 Для связи с менеджером
  • ❤ 5
  • 👍 4
  • 🔥 2
  • 😁 1
More from @codeby_sec
  1. Sep 22, 2026https://youtube.com/shorts/B-JlepDLJP0?feature=share Идеальный курс по ИБ MS SQL, ADCS, AD…
  2. Sep 22, 2026PwnEye PwnEye - это относительно новый инструмент, который пока не получил должного вниман…
  3. Sep 21, 2026377 вакансий в ИБ. И всего 63 резюме. Это не опечатка, это текущий счёт на доске «Карьера…
  4. Sep 21, 20261️⃣Атаки прячут за запросами к нейросетям Злоумышленники нашли новый способ обходить защит…
  5. Sep 21, 2026Мы снесли личные сообщения форума. Полностью. И написали заново — с нуля, без единой строч…
  6. Sep 21, 2026Grype Мощный сканер уязвимостей для образов контейнеров и файловых систем. Характеритики:…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →