Когда вы кликаете по ссылке
tg:// в браузере, винда запускает второй процесс Telegram.exe. Тот видит, что клиент уже запущен, и передает ссылку работающему экземпляру через локальный сокет. Разрабы ТГ не стали заморачиваться со сложной сериализацией и написали протокол из трех моментов... ключевое слово, аргумент и точка с запятой в конце (например, OPEN:tg://x?a=1;). Экранировать сам передаваемый URL не стали или забыли 💩. Стоило запихнуть в тело ссылки символ ;, как парсер работающего клиента резал строку на две независимые команды ⚰️Вторая половина пазла - забытый легаси-хлам. Внутри кода ТГ Desktop годами жил недокументированный внутренний протокол
interpret:, который когда-то написали для скрипта автоматической публикации релизов. Он принимал текстовый файл с инструкциями (file: <путь> и channel: <ID чата>), читал указанный файл с диска и отправлял его в чат без диалогового окна и без какой-либо проверки прав 😗Хакерская цепочка эксплуатировала связку с изяществом лома. Сначала жертву добавляют в левую группу и скидывают туда текстовый файлик с путем к файлу сессии. Десктопный клиент по умолчанию скачивает файлы до 8 МБ в downloads. Затем в чат кидают линк на сайт, сервер злоумышленника отдает 302й редирект на
tg:// со сбросом через относительный путь ../../../Downloads/..., срабатывает инъекция... и ТГ сам загружает файлы авторизации на сервер атакующего ⚰️Самая вкуснятина почему это приводило к мгновенному захвату акка. ТГ шифрует файлы сессии в папке
tdata, но ключ шифрования генерится из локального код-пароля. А поскольку 99% пользователей локальный пароль в настройках десктопа не ставят, ключ шифрования создавался из… пустой строки и открытой соли. Хацкер забирал файлы key_datas и сессионный ключ, расшифровывал MTProto-авторизацию, подкидывал в чистый клиент и получал готовую сессию. Облачная двухфакторка и SMS-коды здесь не спасали в принципе, потому что копировалась уже валидная, залогиненная сессия.Разрабы ТГ исправили дыру в версии 7.2.9, выпилив протокол interpret и наконец-то научив IPC экранировать байты. Причем сделали это в лучших традициях - максимально тихо, скромно написав в чейнджлоге "исправление ошибок рендеринга" и обозвав коммит удалением устаревшего хелпера 🤡
Типичный 🥸 Сисадмин