Что случилось в двух словах
Исследователь под ником beaksec (в кредите VulnCheck назван как Эмилиано Версини) 3 октября опубликовал разбор и PoC. Короткая формула: открываешь присланную в чат ссылку, клиент без подтверждения читает с диска свои же файлы сессии и шлет их в чат атакующего. В этих файлах — ключ авторизации, так что получивший их поднимает твою сессию на своей машине. Полноценный угон аккаунта из одного клика.
Затронуты все версии Telegram Desktop до 7.2.8 включительно. PoC подтвержден на Windows; macOS и Linux автор отдельно не подтверждал, но механика у клиента общая — исходите из того, что уязвимы все десктопные сборки до фикса. Мобильные клиенты и веб к этой дыре отношения не имеют, речь только про десктоп.
Коротко по цифрам. CVE-2026-107181. CVSS 8.1 из 10 по версии 3.1 и 8.6 по версии 4.0 — это High, высокая опасность. Тип по классификатору — CWE-143 (неэкранированный разделитель записей). В каталог активно эксплуатируемых (CISA KEV) не попала, оценка вероятности эксплуатации EPSS низкая (меньше 1%).
Публичных случаев эксплуатации в дикой природе на момент выхода разбора не задокументировано — но PoC уже лежит в открытом доступе.
Как это работает: принцип без рабочей схемы
Конкретные строки эксплойта опущу (полную цепочку давать не будем), но принцип важен — от него зависит защита. Тут сцепились 2 бага.
Когда Telegram Desktop уже запущен, а ты кликаешь ссылку вида tg://, система все равно стартует второй процесс клиента. Тот понимает, что лишний, и передает ссылку работающему клиенту через локальный канал между процессами (IPC, компонент Core::Sandbox) — текстом, несколько команд в строке, разделенных точкой с запятой.
Первый баг: значения внутри строки не экранировались. Вшей в ссылку свою точку с запятой — и принимающая сторона разрежет ее на лишние команды и выполнит как отдельные инструкции. Это и есть инъекция.
Второй баг — куда инъекция дотягивается. У Telegram есть внутренняя недокументированная схема interpret:.
Изначально это служебный инструмент релиза: скрипт писал текстовый файл-инструкцию (в какой канал и какой файл отправить, с какой подписью) и скармливал клиенту, чтобы тот сам выложил сборку. Беда в том, что функция читает указанный файл с диска и шлет его в чат без проверки, кто ее позвал, и без подтверждения. Из командной строки своей машины это безопасно, но через инъекцию стало доступно по кликнутой ссылке.
Как положить файл-инструкцию на чужой диск по известному пути? Это зашито в дефолт клиента: Telegram Desktop автоматически качает файлы из групп (до 8 МиБ) в предсказуемую папку загрузок под именем отправителя. Атакующему хватает добавить жертву в группу (по умолчанию без подтверждения), скинуть туда файлы-инструкции и ссылку.
Жертва открыла группу — файлы тихо осели на диск. Кликнула ссылку — инъекция сработала, указанные файлы улетели в чат атакующего. Ни одного диалога подтверждения. Кликнутая внутри чата tg:// до сокета не доходит, поэтому атака идет через обычную https-ссылку с редиректом на вредоносную tg://.
Что именно утекает и почему этого хватает для угона
Из папки tdata уходят 3 файла: key_ datas (соль и зашифрованный ключ данных), D877F783D5D3EF8Cs (та самая MTProto-авторизация, зашифрованная ключом) и maps из подпапки с тем же именем (индекс хранилища). Имя подпапки, к слову, не случайное и одинаковое на всех установках — оно выводится из дефолтного имени данных, так что атакующему не нужно его угадывать.
А дальше — главный нюанс, из-за которого фермы в зоне риска. Если локальный код-пароль не задан (а по умолчанию он не задан), ключ шифрования выводится из пустой строки и соли, лежащей открытым текстом в том же key_datas.
То есть по трем файлам сессия разворачивается на чужом устройстве без всякого пароля: закинул их в свежую tdata, запустил Telegram — и ты в аккаунте жертвы. С заданным код-паролем файлы украдут, но поднять сессию без пароля не выйдет. Механика та же, что с сессионной кукой на сайте: забрал — стал этим пользователем. Сам примитив при этом шире — произвольное чтение файла с диска, просто сессия Telegram тут самая очевидная цель.
Почему многие до сих пор на уязвимых сборках
Вот это — ключевое для нашей аудитории. Telegram закрыл дыру так, что заметить фикс было почти невозможно.
Фикс приехал коммитом db3405699f от 16 сентября (автор — Джон Престон, ведущий разработчик Telegram Desktop). На следующий день вышла сборка 7.2.9. Что написано в ее чейнджлоге целиком?
Дословно: "Fix some tlottie incorrect renderings" — только про отрисовку. Ни слова про безопасность, угон или tdata. Сам коммит, закрывающий всю цепочку, назван нейтрально — про удаление устаревшего служебного помощника. Advisory не выпускали. Дыру заткнули молча.
Практический вывод: ориентироваться на чейнджлоги Telegram в вопросах безопасности бессмысленно — критичные фиксы едут под видом косметики. Обновляться надо по факту выхода версий, а не когда в релизе напишут слово "security".
Что поправили: разделитель записей теперь экранируется (точка с запятой внутри значения больше не становится границей команды), схему interpret: и функцию отправки файлов вырезали целиком, плюс добавили подстраховку против инъекции других команд. Лечили не симптом, а оба бага сразу.
Хронология, чтобы было видно, сколько дыра жила открытой:
- 25.06.2026 — репорт через ZDI.
- 16.09.2026 — вендор сам пофиксил, коммит db3405699f.
- 17.09.2026 — вышла 7.2.9 (в changelog только про отрисовку).
- 30.09.2026 — ZDI закрыл кейс как уже исправленный.
- 03.10.2026 — публикация разбора и PoC (beaksec).
- 07.10.2026 — присвоен CVE-2026-107181.
Минимально безопасная версия — 7.2.9, но после нее вышли 7.2.10, 7.3.0 и 7.3.1 (10 октября), так что ставьте текущую.
Кто в зоне риска: именно фермы tdata
Обычного пользователя дыра задевает по касательной: нужна социнженерия — добавить в группу, подсунуть ссылку, дождаться клика. А арбитражная ферма — идеальная мишень:
- Формат хранения тот самый. Аккаунты держат папками tdata на десктопе, пачками, часто на одной машине под открытыми клиентами.
- Код-пароль почти никогда не стоит — на заливных аккаунтах это лишнее трение. А без него украденная сессия поднимается без пароля.
- Аккаунты постоянно сидят в чужих чатах — приват-чаты, складчины, байерские группы, каналы реклов. Клик по ссылке там обыденность, приватность добавления в группы выкручена на всех.
- Автозагрузка включена по умолчанию — никто не отключает ее на десятках профилей.
Сложите вместе — и получите ровно условия атаки: аккаунт в tdata, без код-пароля, с автозагрузкой, в чужой группе со ссылкой. Для фермера это не абстрактный CVE, а описание обычного рабочего дня.
Пошаговая защита
По приоритету, от главного к второстепенному:
- Обновить клиент до 7.2.9+ (лучше до текущей 7.3.1) на всех машинах с аккаунтами. Единственное, что закрывает дыру целиком; остальное лишь снижает ущерб.
- Поставить локальный код-пароль (Настройки — Конфиденциальность — Код-пароль). Шифрует tdata так, что украденные файлы не поднимутся без пароля.
- Отключить автозагрузку или включить вопрос, куда сохранять файл (Настройки — Продвинутые — Автозагрузка медиа). Если файл-инструкция не падает на диск сам, подсунуть его по пути нельзя. По оценке автора — самая эффективная мера после обновления.
- Ограничить добавление в группы — только контакты (Настройки — Конфиденциальность — Группы и каналы). Файлы атакующий может слать только в свой канал или супергруппу, куда и затягивает жертву. Закрыл добавление — забрал площадку.
- Не кликать ссылки в чужих группах с рабочих аккаунтов. Банально, но именно клик запускает цепочку.
Что делать, если tdata могла утечь
Если есть подозрение, что с аккаунта кликали мутную ссылку в чужой группе на уязвимой версии — исходите из того, что файлы уже скопированы, и действуйте так, будто сессия в чужих руках.
- Завершить все другие сеансы (Настройки — Устройства — Завершить все другие сеансы). Ключевой шаг: отзывает ту самую MTProto-авторизацию, которую могли украсть, и копия сессии перестает работать.
- Включить облачный пароль (2FA), если не был. Но учтите: сам 2FA не спасает от уже скопированной сессии — ключ работает и без него. Поэтому сперва обязательно завершаем сеансы, и только это реально обрывает доступ; 2FA — на будущее.
- Обновить клиент и поставить код-пароль до следующего входа.
- Перепроверить, что уходило через аккаунт за время возможной компрометации: привязанные каналы, боты, доступы, переписку с деньгами.
Итог
CVE-2026-107181 — не про экзотику, а про дефолтные настройки, на которых работают многие фермы: tdata на десктопе, без код-пароля, с автозагрузкой, в чужих группах. Дыру закрыли основательно, но молча — в релизе ни слова, advisory нет. Реальный риск сейчас не в самой уязвимости, а в том, что про фикс никто не узнал.
Делается все за 5 минут: обновить клиент до 7.2.9+ на всех машинах, прогнать по аккаунтам код-пароль и автозагрузку, закрыть добавление в группы. Дешевая страховка против сценария, где один клик менеджера уводит пачку рабочих аккаунтов разом. А привычку не ждать слова "security" в чейнджлоге Telegram стоит занести в регламент: его там может не быть никогда.