Последнее время в Telegram все чаще обсуждаются темы пробива людей и утечек персональных данных. Мне стало интересно, а насколько сама экосистема Telegram устойчива к подобным утечкам.
Под катом история о том, как я нашел баг в Telegram. Баг позволяет ввести в заблуждение пользователя, и подтолкнуть его неосознанно поделиться своими данными — геолокацией и номером телефона.
Вот как это работает:
Сложность системы всегда была врагом безопасности.
Telegram вырос, уже перестал быть просто мессенджером, и дорос до большой медиа платформы с богатым функционалом. Отдельным особняком стоит Telegram Bot API, позволяющее выстраивать целые приложения внутри мессенджера — так называемых ботов.
Скорее всего каждый, кто пробовал создать своего бота, уже знает, что пользователю можно отправить запрос его номера телефона с помощью специальной кнопки.
Текст на этой кнопке можно задать любой. Причём такие же кнопки бот может использовать и для других взаимодействий:
После нажатия на кнопку, пользователю конечно же будет показано предупреждение что сейчас его контакт будет отправлен боту:
Это сообщение довольно однозначно говорит о риске деанонимизации, и предостерегает вдумчивого пользователя от опасных для него действий.
Перебирая обновления API, я вспомнил, что в какой-то момент Telegram дал пользователям возможность делать собственные локализации мессенджера. Были примеры, когда локализацию использовали для шуточных переделок интерфейса. В тот момент мне пришла в голову та же мысль, что и возможно вам сейчас:
А что, если попробовать “шуточно перевести” диалоговое окно, предупреждающее пользователя о передаче номера телефона боту, заменив его текст?
Вначале я думал, что заставить пользователя установить в приложение посторонний xml файл-локализацию будет намного сложнее, чем просто убедить кликнуть на Share contact. Ведь именно так, с помощью xml файла, Telegram предлагал распространять свои локализации среди собеседников.
Так я думал, пока не наткнулся в
Для просмотра ссылки необходимо нажать
Вход или Регистрация
на обработчик ссылок setlanguage. То что нужно!
Оказалось, что в Telegram уже давно сделали платформу переводов, translations.telegram.org, доступную для всех пользователей Telegram, и теперь не нужно передавать никаких xml файлов.
Достаточно кликнуть по ссылке
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, после чего пользователь увидит диалоговое окно с запросом установки нового языка. И это окно значительно менее отпугивающее, чем сообщение о запросе номера телефона:Как это работает?
Регистрируемся на
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Добавляем свой язык, переводим нужные нам
Для просмотра ссылки необходимо нажать
Вход или Регистрация
и
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. В локализации можно писать все что угодно. Мы напишем безобидный текст вместо ужасного предупреждения о расшаривании геолокации и номера телефона. Проделываем тоже самое для остальных платформ.
Наш ядовитый язык готов. Осталось подсунуть его пользователю.
Мне так и не удалось найти способ узнать установил ли пользователь предложенную ему локализацию. Не нашлось ни статистики языка на translations.telegram.org, ни изменений в профиле пользователя. Bot api позволяет узнать язык пользователя через
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, но его значение берется из системных настроек. Смена языка в приложении на параметр никак не влияет. Что ж, тогда просто добавляем небольшую задержку после сообщения с ссылкой на язык. После выбора языка предлагаем пользователю ознакомиться с меню бота. При нажатии Ок в данном диалоговом окне, номер утекает к боту сообщением, а бот это сообщение тут же удаляет. Если бот будет использовать webhook для получения обновлений, то сообщение удаляется быстрее и пользователь возможно и не поймет что он только что отправил свой контакт.
Кстати, аналогично запросу контакта бот может попросить пользователя расшарить его геолокацию. Да, и это диалоговое окно тоже можно “перевести”.
Как исправить
Очевидно нельзя давать возможность пользователям переводить абсолютно весь интерфейс без модерации. Модерация переводов кстати включена для например вот этого диалогового окна
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. О необходимости модерации нам сообщает метка Critical.Выходит что вот такое маленькое упущение как отсутствие метки Critical для диалогов о расшаривании номера и геолокации приводят к утечке. Утечке весьма чувствительных данных, как для мессенджера строящего свой маркетинг вокруг privacy/security.
Мессенджер привязанный к вашему личному номеру телефона по определению не может быть приватным. Он может лишь удорожить процесс раскрытия вашей личности.
Данная уязвимость попала в программу bug bounty телеграма и была оценена в 100€.
Для просмотра ссылки необходимо нажать
Вход или Регистрация