Одного клика по ссылке достаточно, чтобы настольный клиент Telegram отправил чужие файлы в канал злоумышленника. Уязвимость CVE-2026-107181 затрагивает Telegram Desktop до версии 7.2.9, оценка по шкале CVSS 3.1 составляет 8.1, по CVSS 4.0 - 8.6, уровень High. Подтверждена работа цепочки на Windows, в остальных системах клиент использует тот же механизм обработки ссылок. В финале атаки злоумышленник получает доступ к чужой учётной записи, а не отдельные документы. Механику описал исследователь Эмилиано Версини.
Уязвимость CVE-2026-107181
Схема опирается на то, как клиент обрабатывает собственные ссылки. Операционная система знает, что адреса вида tg:// принадлежат Telegram, и запускает приложение, передавая ему строку целиком. Если копия уже работает, новый процесс не открывает второе окно: он находит локальный сокет, отдаёт по нему ссылку и завершается. Сокет переносит байты, а не объекты, поэтому ссылку приходится превращать в строку. Формат простой: ключевое слово, аргумент и точка с запятой в роли разделителя между командами. Первая ошибка касается именно этой точки. Содержимое ссылки перед записью в сокет не экранируется, поэтому точка с запятой внутри параметров становится границей между командами. Адрес вида tg://x?a=1;OPEN:interpret:... приходит на принимающую сторону не одной инструкцией, а двумя.
Вторая ошибка - внутренняя схема interpret:. Она появилась для публикации релизов Telegram. Сценарий сборки писал текстовый файл, где указаны канал, отправляемый файл и подпись, после чего запускал клиент с путём к этому файлу. Обработчик читал инструкцию и отправлял файл в заданный канал. Проверки прав не было, запроса на подтверждение тоже. Из командной строки это не создавало проблемы: чтобы добраться до неё, злоумышленнику уже нужен доступ к машине. Но как только та же операция стала достижимой через сокет, действие с повышенными правами оказалось доступно из клика по ссылке.
Путь к файлу-инструкции не очищался от переходов на уровень выше, поэтому относительный адрес вроде ../../../Downloads/Telegram%20Desktop/instructions.txt выводил за пределы служебного каталога. Имя пользователя знать не требуется: относительные пути отсчитываются от рабочего каталога клиента, а папка загрузок лежит рядом с ним, на три уровня выше.
Практическая атака выглядит так. Злоумышленник создаёт супергруппу и добавляет туда жертву: при настройках по умолчанию согласие приглашённого не нужно. В группу заранее загружаются текстовые файлы-инструкции, по одному на каждую цель. Настольный клиент в стандартной конфигурации сам скачивает из групп файлы размером до 8 МиБ, поэтому инструкции оказываются на диске без единого действия со стороны человека, в папке Downloads/Telegram Desktop и под предсказуемыми именами. Затем в чат уходит обычная ссылка на https, а сервер злоумышленника отвечает перенаправлением на адрес tg://x?a=1;OPEN:interpret:... Каждая точка с запятой открывает новую команду, и вся цепочка вытаскивает по файлу за шаг. Подтверждений и уведомлений при этом не появляется. Ссылку нужно открывать вне Telegram: адреса tg://, нажатые в самом чате, обрабатываются внутри процесса и до сокета не доходят.
Дальше начинается работа с украденным. Telegram Desktop не хранит локальные данные в открытом виде, включая авторизацию сессии. Ключ шифрования данных сам защищён вторым ключом, который получают из пароля пользователя и соли. Локальный пароль по умолчанию не задан, поэтому в вычисление уходит пустая строка, а соль лежит открыто рядом с зашифрованным ключом в файле tdata/key_datas. Одного этого файла хватает, чтобы восстановить второй ключ, распаковать ключ шифрования данных и прочитать файл авторизации протокола MTProto (собственный протокол Telegram для связи клиента с серверами). Трёх файлов из служебного каталога достаточно, чтобы собрать копию сессии и открыть чужой аккаунт на своём устройстве. Локальный пароль здесь работает иначе, чем кажется: он не мешает вынести файлы, зато делает украденную сессию бесполезной.
Об устранении почти не сообщали. Правку внесли 16 сентября 2026 года, выпуск 7.2.9 опубликовали на следующее утро; в списке изменений упоминалась только правка отрисовки. Саму уязвимость закрыли, убрав схему interpret:// и функцию, которая её обслуживала, и добавив экранирование разделителя при передаче данных через сокет: точка с запятой внутри значения больше не превращается в границу команды. Заодно клиент перестаёт выполнять служебные записи, если то же соединение несёт открытие ссылки, и отбрасывает локальные пути, когда в соединении уже встречался внешний адрес. Идентификатор CVE-2026-107181 присвоили 7 октября, изначальный отчёт ушёл в программу раскрытия уязвимостей ZDI (ZDI, Zero Day Initiative, площадка по скупке и публикации сведений о уязвимостях) ещё 25 июня.
Что делать пользователям настольного клиента. Обновление до 7.2.9 устраняет причину, остальное снижает риск. Включите опцию "спрашивать, куда сохранять каждый файл": тогда автоматическая загрузка из групп не сработает и файл-инструкция не окажется на диске. Ограничьте круг тех, кто может добавлять вас в группы, только контактами. Отправлять украденное можно лишь в канал или супергруппу, так что это отнимает у атаки место доставки. Локальный пароль выбирайте как настоящий, а не четыре цифры.
История показывает слабое место настольных клиентов. Служебные механизмы, рассчитанные на локальный запуск и доверенное окружение, становятся доступны снаружи, как только до них дотягивается обработчик внешних ссылок. Ошибка в разделителе превратила внутренний инструмент сборки в канал утечки, а тихое исправление означает, что часть пользователей до сих пор не знает, почему им стоит обновиться.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-107181
- https://beaksec.github.io/posts/telegram-desktop-one-click-account-takeover/
- https://github.com/telegramdesktop/tdesktop/commit/db3405699f8fc3ae28a58d2348b7d13a43c0590a
- https://github.com/telegramdesktop/tdesktop/blob/v7.2.8/Telegram/SourceFiles/core/sandbox.cpp#L362-L364
- https://github.com/telegramdesktop/tdesktop/blob/v7.2.8/Telegram/SourceFiles/support/support_helper.cpp#L673-L751
- https://www.vulncheck.com/advisories/telegram-desktop-before-7.2.9-ipc-record-injection-file-exfiltration-via-interpret-scheme