Раскрытие номера телефона и геолокации через уязвимость в Телеграме

image

Последнее время в Telegram все чаще обсуждаются темы пробива людей и утечек персональных данных. Мне стало интересно, а насколько сама экосистема Telegram устойчива к подобным утечкам.

Под катом история о том, как я нашел баг в Telegram. Баг позволяет ввести в заблуждение пользователя, и подтолкнуть его неосознанно поделиться своими данными — геолокацией и номером телефона.

Вот как это работает:


Сложность системы всегда была врагом безопасности.

Telegram вырос, уже перестал быть просто мессенджером, и дорос до большой медиа платформы с богатым функционалом. Отдельным особняком стоит Telegram Bot API, позволяющее выстраивать целые приложения внутри мессенджера — так называемых ботов.

Скорее всего каждый, кто пробовал создать своего бота, уже знает, что пользователю можно отправить запрос его номера телефона с помощью специальной кнопки.

Текст на этой кнопке можно задать любой. Причём такие же кнопки бот может использовать и для других взаимодействий:

image

После нажатия на кнопку, пользователю конечно же будет показано предупреждение что сейчас его контакт будет отправлен боту:

image

Это сообщение довольно однозначно говорит о риске деанонимизации, и предостерегает вдумчивого пользователя от опасных для него действий.

Перебирая обновления API, я вспомнил, что в какой-то момент Telegram дал пользователям возможность делать собственные локализации мессенджера. Были примеры, когда локализацию использовали для шуточных переделок интерфейса. В тот момент мне пришла в голову та же мысль, что и возможно вам сейчас:

А что, если попробовать “шуточно перевести” диалоговое окно, предупреждающее пользователя о передаче номера телефона боту, заменив его текст?

image image

Вначале я думал, что заставить пользователя установить в приложение посторонний xml файл-локализацию будет намного сложнее, чем просто убедить кликнуть на Share contact. Ведь именно так, с помощью xml файла, Telegram предлагал распространять свои локализации среди собеседников.

Так я думал, пока не наткнулся в исходных кодах android приложения на обработчик ссылок setlanguage.

image

То что нужно!

Оказалось, что в Telegram уже давно сделали платформу переводов, translations.telegram.org, доступную для всех пользователей Telegram, и теперь не нужно передавать никаких xml файлов.

image

Достаточно кликнуть по ссылке t.me/setlanguage/%lang%, после чего пользователь увидит диалоговое окно с запросом установки нового языка. И это окно значительно менее отпугивающее, чем сообщение о запросе номера телефона:

image

Как это работает?


Регистрируемся на translations.telegram.org.

Добавляем свой язык, переводим нужные нам элементы интерфейса и еще парочку других.

В локализации можно писать все что угодно. Мы напишем безобидный текст вместо ужасного предупреждения о расшаривании геолокации и номера телефона. Проделываем тоже самое для остальных платформ.

Наш ядовитый язык готов. Осталось подсунуть его пользователю.

image

Мне так и не удалось найти способ узнать установил ли пользователь предложенную ему локализацию. Не нашлось ни статистики языка на translations.telegram.org, ни изменений в профиле пользователя. Bot api позволяет узнать язык пользователя через параметр language_code, но его значение берется из системных настроек. Смена языка в приложении на параметр никак не влияет.

Что ж, тогда просто добавляем небольшую задержку после сообщения с ссылкой на язык. После выбора языка предлагаем пользователю ознакомиться с меню бота. При нажатии Ок в данном диалоговом окне, номер утекает к боту сообщением, а бот это сообщение тут же удаляет. Если бот будет использовать webhook для получения обновлений, то сообщение удаляется быстрее и пользователь возможно и не поймет что он только что отправил свой контакт.

Кстати, аналогично запросу контакта бот может попросить пользователя расшарить его геолокацию. Да, и это диалоговое окно тоже можно “перевести”.

Как исправить


Очевидно нельзя давать возможность пользователям переводить абсолютно весь интерфейс без модерации. Модерация переводов кстати включена для например вот этого диалогового окна translations.telegram.org/rutech/ios/unsorted/AuthCode.Alert. О необходимости модерации нам сообщает метка Critical.

image

Выходит что вот такое маленькое упущение как отсутствие метки Critical для диалогов о расшаривании номера и геолокации приводят к утечке. Утечке весьма чувствительных данных, как для мессенджера строящего свой маркетинг вокруг privacy/security.

Мессенджер привязаный к вашему личному номеру телефона по определению не может быть приватным. Он может лишь удорожить процесс раскрытия вашей личности.

Данная уязвимость попала в программу bug bounty телеграма и была оценена в 100€.

P.S.

Заходите к нам в Telegram чат @secinfosec. Там мы делимся опытом и обсуждаем всё что касается информационной безопасности: баг баунти, пентесты, бумажную и практическую безопасность, новые угрозы и методы борьбы с ними.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 15

    –2
    Данная уязвимость попала в программу bug bounty телеграма и была оценена в 100€.
    Потому что пробив по номеру стОит существенно дороже, не говоря уже о том, что номер м.б. оформлен на дядю или вообще быть не российским, где цены на пробив драматически выше.
    А какие геоданные отдаст десктопный клиент?
    Продолжение банкета
    Но все это никак не помешало каналу «шум прибоя» вывалить кучу ПД конкурирующих админов. И лишь единичные админы поржали в ответ, указывая на публичный источник их ПД и их связи с каналом.
    Еще больше юмора случилось с деаноном админа, который прямо в описании канала указал свое реальное ФИО и место работы.

    Итого: «первая телеграмная война»(с) началась успешными сливами — судя по нервной реакции с обеих сторон, но источниками сливов были явно не описываемые в статье багофичи.
    А что там у тебя, Сеня?
    www.youtube.com/watch?v=-BuwEvVPU84

    И только из-за подлого вируса судьба «футляра», его СИМ-карты, а также снятой суммы в битках, заработанных непосильным трудом, канула в лету… с лёту… Интересно, что же будет к лету?
      +15
      Будем честны, это не уязвимость, а социнженерия + недоработка телеграма.
        –1

        Предлагаю считать, что это комплект из мелкой уязвимости и социнженерии.

          –1
          Вот так легким движением руки говорим не уязвимость, а просто недоработка и можно не платить за найденную уязвимость. Не надо быть таким, фу :)
            +3
            Ну не доработка это вообще идентификация клиента.
            Ну о какой анонимности может идти речь, если регистрация по номеру телефона, пусть даже и дяди/тети/купленного в переходе.
            Если нужна анонимность, то только emeil и желательно анонимный и разовый, только что бы стать клиентом мессенджера.

              +1

              Если нужна анонимность, не нужен даже email — Jami & co передают пламенный привет.

          +2

          Утечка данных чаще происходит, когда юзер тыкает кнопку "добавить контакт" которая появляется при чате с новым пользователем. В этом случае он добровольно отдаёт свой номер, что не очевидно. У меня много таких контактов уже. Сам пару раз в начале слуачано тыкал по этому сообщению.

            –1

            Что мешает в настроить показ своего номера? Просто запретить всем видеть Ваш номер

              0

              Но при этом ведь даже специальная галочка показывается, позволяющая не светить свой номер собеседнику:
              image

                0
                Хм, возможно это позже добавили, я тыкал в самом начале, просто добавляло молча и номер шарило. После я уже не пробовал. Можно попробовать поискать в ченжлоге это.
              +4
              Тот случай, когда заголовок громче самой статьи
              Выше верно заметили
              Утечка данных чаще происходит, когда юзер тыкает кнопку «добавить контакт» которая появляется при чате с новым пользователем. В этом случае он добровольно отдаёт свой номер, что не очевидно. У меня много таких контактов уже. Сам пару раз в начале слуачано тыкал по этому сообщению.

              Будем честны, это не уязвимость, а социнженерия + недоработка телеграма.


                +1
                в настройках дефолтных стоит «показывать телефон своим контактам», а надо изменить на «никому» и добавляй себе
                –1
                Открыт новый сезон «Телеграм забагован/ненадёжен/сливает инфу/продался, пользуйтесь ICQ и Там-Там»?
                  +1
                  Мессенджер привязаный к вашему личному номеру телефона по определению не может быть приватным. Он может лишь удорожить процесс раскрытия вашей личности.
                  Опять путаем анонимность и приватность?
                    +1
                    Хорошее замечание. Все зависит от модели угроз и дополнительных условий.

                    Допустим есть некий блогер который общается в Telegram группе и ведет канал от своего настоящего имени. При этом он не хочет чтобы его номер знали посторонние люди. В данном случае номер телефона это конфединциальные данные защищенные настройками Privacy and Security в приложении. Анонимности уже итак нет, а приватность может быть нарушена с помощью рассмотренного сценария атаки.

                    Другой кейс: в Telegram чате некий пользователь под вымышленным именем не лестно высказался о действующей власти. Этот пользователь зарегистрировался под собственным номером телефона. В данном случае он анонимен и его номер это приватные данные. Его номер также можно раскрыть рассмотренным сценарием, но это всё еще не нарушит его анонимность потому что номер сам по себе почти ничего не сообщает о личности владельца аккаунта, это всего лишь набор чисел.

                    Выходит что в обоих примерах нарушается именно приватность и только во втором может быть нарушена анонимность. И это лишь в том случае если номер телефона получится сопоставить с личностью найдя например сайт-визитку владельца, где указан его номер, или сопоставив номер с другой утекшой базой данных, или просто позвонив по номеру и сказав «Привет. Ты кто?».

                    На мой взгляд анонимность впринципе не может быть достигнута техническими решениями, а лишь правильным их использованием.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое