Недавно я обнаружил в Telegram очень интересный баг. Он позволяет читать удалённые сообщения. И как сторонник и фанат культовых продуктов — тут же отправил сообщение о баге саппорту Telegram. Со спокойной совестью демонстрировал коллегам на работе, найденный баг. «Хочешь восстановлю твоё последнее сообщение в Telegram?» — говорил я и принимался за дело, наблюдая удивленные лица коллег.

telegram bug

Впрочем не будем медлить и перейдем к делу


Версия Telegram Desktop 1.6.3(последняя возможная на сегодня)

Шаги для воспроизведения

  1. Отправляем «секретное» сообщение Бобу
  2. Чистим чат сообщений с Бобом, кнопочка «Clear history»
  3. Отправляем новое любое сообщение Бобу
  4. Удаляем сообщение из контекстного меню «Delete message» (ставим галочку — удалить у Боба тоже)

Ожидания

Все сообщения удалены и чат полностью пуст.

Реальность

Появилось наше «секретное сообщение», которое было удалено.

Дальнейший ход моих мыслей


Первым делом, хотелось понять — это сторона сервера или сторона клиента. Поэтому аналогичным образом я попытался воспроизвести багу на клиенте Telegram под Android. К сожалению, на сотовом бага не воспроизвелась и оптимизм уже поубавился. Стало понятно, что перед нами скорее всего косметический фикс: напутали с индексами и из локального кэша достается чуть больше записей.

Так как Telegram Desktop является open source и лежит на github. Я нашёл свою версию Telegram, открыл код и попытался понять что к чему. Код оказался достаточно тривиальным и понятным. Всё начинается с подвешивания обработчика для команды. Он всего лишь показывает диалоговое окошечко с параметрами для удаления и дальше идёт очистка чата. Лично я визуально глазом ни за что не зацепился и вроде всё работает правильно. Нужно развернуть environment, отладить и сразу станет понятно, что к чему.

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

Если вам понравится данная статья и будет много комментариев, я обязательно напишу следующую статью: «Как я исправил баг в Telegram». А так же расскажу подробно, как развернуть environment для desktop версии Telegram. Спасибо за внимание!

Update


Как изменилась жизнь после публикации на Хабре


Как обычно встаю и смотрю новости в google. Вижу на первых страницах свою ФИО и понимаю, что что-то не так. Народ воспроизводит тоже эту багу и форсит данный message(полный текст статьи). Это очень приятно, спасибо!

image

Смотрим Android app


В личку многие попросили посмотреть Android app. Не могу отказать коллегам и устанавливаем Android приложения Telegram. Особо я не вникал, но и тут достаточно ошибок. Например, вот.

image

Шаги воспроизведения
1) Очищаю историю с «Victor»
2) «Victor» пишет сообщение

Ожидания
Приходит notify через сервер google и сообщение отображается в ListView.

Реальность
Notify приходит, но ListView не отображает изменения. Стоит пометка «История очищена».

Как была найдена текущая бага


Очень много коллег интересовало, как я нашёл данную багу. Потому что у всех Telegram «работает как часы». Мой бывший тим-лидер(Антон Рыжаков), когда-то отвечал на этот вопрос так: «Тыкал тыкал и беду натыкал». Это очень точно характеризует всё происходящее. Друзья, спасибо Вам за все отклики в личку — их очень приятно было читать. Надеюсь Вам было интересно. Хорошего рабочего дня!

Комментарии (17)


  1. Anton23
    06.04.2019 19:04
    +2

    Конечно, мини-баг есть. Но я объясню причину, почему его не торопятся устранять — это не какая-либо страшная уязвимость, потому что это было одностороннее «стирание», и сообщение все равно хранится у получателя. И кстати если человек захочет его получить, он может просто попросить второго человека переслать ему его сообщение.


  1. ncuxonaT
    06.04.2019 20:18
    +2

    А android-приложение продолжает хранить «удаленные» изображения и видео в папке Telegram в памяти телефона.


    1. anloop
      06.04.2019 21:05
      -5

      Ну каталоге же, не папке


      1. Zibx
        06.04.2019 21:41
        +5

        Нет, на телефонах — директории.


    1. jevius
      06.04.2019 22:04

      Это не так критично с новыми политиками Google на доступ к памяти сторонним приложениям. Но неприятно, согласен. Зато это выручает когда случайно удаляешь сообщение с каким-то файлом


    1. sankooo
      07.04.2019 17:53

      Ого, может еще и после закрытия страницы браузера в системном кэше остаются картинки?


  1. yse
    06.04.2019 22:35
    +8

    Переименуйте, пожалуйста, заговоловок в «Новый баг в одном из клиентов Telegram...» и создайте issue на гитхабе с описанием проблемы. Думаю, это будет наиболее быстрый вариант решения «проблемы»


    1. mikechips
      07.04.2019 00:25

      Автору хочется самому ощупать, а о баге он уже сообщил)


      1. Firsto
        07.04.2019 11:19

        Судя по последнему абзацу, он его уже исправил, и может даже пулл-реквест отправил.


    1. gurovofficial Автор
      07.04.2019 17:41

      Спасибо, исправил! :)


  1. diomas
    07.04.2019 02:35

    А почему на первом шаге (clear history) не поставили галочку "also delete for Alice"? Понятно же, что сообщения в этом случае останутся сохраненными


    1. lybin
      07.04.2019 10:22
      +3

      Потому что в этом случае баг не воспроизведется?


  1. Lordbl4
    07.04.2019 11:16

    Заголовок для следующей статьи: «Как я исправил баг в Telegram и не получил работу у Дурова»


  1. good_message
    07.04.2019 17:52

    Это очень редкий сценарий. Вы односторонне удалили переписку целиком, чтобы получить одно сообщение.
    Можно ли так восстановить всю переписку, которая удалена?
    Не так давно в мобильных клиентах Телеграм предоставил возможность отменить удаление переписок в течение 10 секунд. Восстановится ли сообщение после истечения этого времени?


    1. antanubis
      08.04.2019 11:21

      Баг действительно есть, но он не только редкий, но и незначительный и локальный. «Восстановить» можно только одно сообщение, которое только что было перед вами на экране.

      — Нельзя восстановить всю переписку.
      — Нельзя восстановить ни одно сообщение, которое только что не отображалось в приложении.
      — Нельзя восстановить ни одно сообщение, которое было удалено не вами в этом приложении (скажем, если переписку удалял ваш собеседник или вы, но с другого устройства, ничего не восстановится).
      — Сообщение некорректно очищается из оперативной памяти, то есть его можно просмотреть локально, но только из этого запуска этого приложения (если посмотреть с другого устройства, например телефона, или хотя бы перезапустить приложение, сообщения уже не будет).


  1. antanubis
    08.04.2019 11:24
    +1

    Грустно, что по такому незначительному багу (см. уточнения выше — можно увидеть только одно сообщение, только на одном устройстве и только до перезапуска приложения, пока сообщение висит в оперативной памяти, и только то сообщение, которое ты сам только что удалял) затем пишутся статьи с заголовками «Ошибка в Telegram позволяет прочитать удаленные сообщения» — вроде и правда, но кликбейт.


    1. sumanai
      08.04.2019 20:49

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