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

До недавних пор нигде, кроме как при входе в аккаунт, пароль не запрашивался. Дела изменились тогда, когда добавили возможность передачи канала другому аккаунту, а сегодня и передачу ботов. Мало того, что для трансфера необходимо соответствовать критериям, например, иметь включенную 2FA и просидеть с ней 7 дней, не менять пароль и прочее, дык ещё и повторно ввести пароль при переносе статуса владельца канала. И это замечательно!

Каково было моё удивление, когда я решил сменить мобильный номер на своём основном аккаунте. Следите за действиями: зашёл в настройки, нажал на редактирование, тапнул по номеру, подтвердил намерения, ввёл новый номер, ввёл код, который пришёл SMSской на новый номер, всё…



Чего-то не хватает… Как-то слишком просто… Ах, да, а где 2FA как при передаче канала? Она же у меня включена! Ладно если бы я ей не пользовался!

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

Теперь никто не может войти в аккаунт. После смены номера человек закрыл все сессии на ваших других девайсах, оставив только тот, что отобрал. Вы не в силах войти в аккаунт, так как вам нужен код с SMS на номер, который вы не знаете. Злоумышленник не в силах войти с другого устройства, так как ему нужен пароль от 2FA, но у него есть доступ к вашему аккаунту! Больше ему и не надо!

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

В Telegram есть механизмы по удалению аккаунтов, когда сотовый оператор передал номер другому владельцу, а номер оказался зарегистрированным и с 2FA. Столкнулся с этим лично. У меня было 7 дней для отмены всей процедуры. Чтобы её отменить необходимо ввести код из SMS с номера, доступа к которому у меня уже не было. Другим вариантом было сменить номер телефона на другой. Я просто перенёс всё с того аккаунта на другие ии… его удалили.

Понятно, что просить подтверждение старого номера для смены на новый – плохая идея. Это убивает решения разных проблемных случаев. Активные сессии и 2FA должны быть гарантом, а от привязки телефонов вообще надо куда-то уходить, но пока некуда…

Только что вышло обновление Bot API 5.0! Очень сочно, за это отдельное спасибо, но помимо этого довели до прода возможность передачи прав на ботов между аккаунтами. И даже несмотря на то, что всё управление через BotFather'a (официального бота), оно умудряется запрашивать 2FA! Такой тип inline кнопки не задокументирован. При нажатии всплывает окошко с вводом пароля.
Скриншот всплывающего окна в процессе передачи прав


Посмотрев на всевозможные случаи, увидев разные подходы в Telegram, можно попросить Павла (@durov) только об одном… Давайте использовать подтверждение 2FA не только при входе и смене владельца бота/канала, но и при смене номера телефона и удалении аккаунта хотя бы тогда, когда она включена.


Конечно, что уж тут говорить про возможность удаления аккаунта без 2FA, когда его всё ещё можно удалить с помощью переименования аккаунта в «Saved Messages».

Видео с удалением аккаунт при переименовании


Моя самая маленькая статья, поэтому без привычного «спасибо, что дочитали аж до сюда».

P.S. Не используем Face ID, сканеры отпечатков пальцев. Не храним пароли в голове. Генерируйте случайные, храните в парольных менеджерах. Хоть что-то, хоть как-то. Идеально не будет никогда.

P.S.S. Спасибо Олегу, за удаление двух аккаунтов для видеоматериала данной статьи.