🏦
Как не нужно писать Telegram-ботовDANO — олимпиада по анализу данных, одним из организатором которой является Т-Банк Образование. Незадолго до объявления списка финалистов я нашёл бота, который предназначался для этого финала —
@team_DANO_bot. Из функций — сбор команды, загрузка документов и гипотезы для исследования
Очевидно, что к боту должны иметь доступ только финалисты, поэтому в нём стояла аутентификация —
бот просит нажать на кнопку и
отправить свой контакт с номером телефона. Отправляемый контакт выглядит так же, как и любой другой контакт, которым можно поделиться, поэтому можно
отправить не свой контакт, а любого другого пользователя — бот увидит не ваш номер, а чужой. От этого легко защититься — нужно проверять, что контакт действительно принадлежит тому пользователю, который его отправил.
Я попробовал отправить контакт с номером телефона одного из организаторов, и это сработало (рис. 1). На этот момент я не только
получил несанкционированный доступ к боту
, но и мог
войти от имени любого участника, номер телефона которого я знаю.
Изучая функционал бота, я нашел выбор участников для добавления в команду. Он реализован через inline-кнопки, у которых есть callback data — а-ля ID кнопки, которое устанавливает сам бот. Важно:
callback data может прочитать пользователь. Автор бота решил хранить там не ID пользователя, а его
номер телефона (рис. 2) — получается, что я имею
доступ ко всем номерам телефонов, а вкупе с предыдущем абзацем могу зайти от имени любого человека. Этого уже хватало, чтобы наложить крест на безопасности бота.
Также я заметил, что проверка ограничений в диалогах из нескольких сообщений выполнялась не в конце диалога, а в начале, из-за чего открывался интересный спектр багов —
удаление бывшего участника-жертвы команды атакующего
из любой другой (видео 3), добавление более 5 участников в команду и так далее.
Я сообщал о всех проблемах по мере их обнаружения, из-за чего организаторы в целом отказались от исправления ошибок и использования этого бота на олимпиаде.
Это не первый случай, когда у проектов Т-Образования появлялись бреши в безопасности. На фестивале See You от Центрального университета (IT-вуза Т-Банка) был бот с применением Web Apps, где
отсутствовала валидация ID пользователя => я собрал список из 150 пользователей и потенциально мог получить доступ к их ЛК внутри бота. А 5 июня (момент ребрендинга Тинькоффа в Т-Банк) во время смены юзернеймов у Telegram-каналов их владельцы забыли закрепить за собой старые юзернеймы, из-за чего в руки третьих лиц попали
@tinkoff_fintech,
@tinkoff_invest_official,
@tinkoff_career и другие, раньше принадлежавшие Т-Банку.