Xakep #305. Многошаговые SQL-инъекции
Летом текущего года в Гонконге начались массовые акции протеста, связанные с поправками, предложенными к существующему закону об экстрадиции. В случае одобрения эти поправки позволят Гонконгу выдавать подозреваемых юрисдикциям, с которыми у него нет соглашения об экстрадиции, в том числе Тайваню, Макао и материковому Китаю. Позднее все это переросло в требования привлечения к ответственности полиции (за жесткие действия против демонстрантов), а также отставки главы администрации, и массовые акции продолжаются до сих пор.
По данным СМИ, протестующие координируют свои действия преимущественно через Telegram. Но журналисты издания ZDNet обратили внимание, что многие участники акций не до конца понимают, как работает приложение и обвиняют его разработчиков в допущении опасной ошибки.
Дело в том, что в настройках приложения пользователь может определить уровень своей конфиденциальности и решить, кто именно будет видеть номер его телефона. В числе прочего можно выбрать опцию «Никто». Однако протестующие в Гонконге обнаружили, что выбор этой настройки не означает, что никто и ни при каких обстоятельствах не узнает их номер. Дело в том, что теоретический атакующий может добавить десятки тысяч номеров в адресную книгу своего телефона, а затем подключиться к группе в Telegram и синхронизировать свои контакты с приложением. В итоге приложение «расскажет» атакующему, какие из номеров имеют активную учетную запись и состоят в протестной группе.
Таким образом правоохранительные органы и спецслужбы могут собрать номера протестующих, а затем заставить местных мобильных операторов раскрыть данные их владельцев.
После того как информация об этой проблеме распространилась на популярных в Гонконге форумах, группа местных инженеров опубликовала предупреждение (которое гласит, что баг легко автоматизировать и использовать) и попыталась связаться с разработчиками Telegram для устранения ошибки. Авторы документа пишут, что ошибка мешает координации будущих демонстраций и ставит под угрозу участников протестных групп, так как правительство, скорее всего, уже знает о баге и активно им пользуется. Единственным выходом из ситуации (если разработчики не устранят проблему), они называют использование одноразовых и «левых» SIM-карт.
Переходить на другие мессенджеры протестующие не хотят, так как, по их словам, Telegram, лучше показывает себя в работе с большими группами, а Signal и Wire этим похвастаться не могут (там группы ограничены несколькими сотнями человек). К тому же, Signal в любом случае раскрывает номер телефона пользователя.
Журналисты ZDNet не только привлекли внимание к недовольству гонконгских пользователей, но и связались с разработчиками Telegram, чтобы узнать, что те намерены делать. Представители команды мессенджера ответили, что в Telegram уже есть механизм, предотвращающий подобные сценарии атак.
Так, по информации разработчиков, бот, извлекающий телефонные номера, работу которого демонстрировали на скриншотах гонконгские протестующие, успел проработать лишь две секунды, после чего был деактивирован. За это время ему удалось успешно импортировать лишь 85 контактов (а не 10 000, о которых шла речь). Более того, после получения бана на импорт контактов, можно добавлять не более пяти новых номеров в день. Остальные добавленные контакты будут выглядеть так, будто не используют Telegram, даже если на самом деле это не так.
К сожалению, такую защиту определенно можно обойти. Так, для извлечения телефонных номеров можно создать множество ботов, и это явно не будет проблемой, особенно если речь идет о правоохранительных органах и правительстве.
Кроме того, гонконгские протестующие недовольны не только самой возможностью извлечения телефонных номеров, но и тем фактом, что выбирая «Никто» в настройках, они ожидали, что их номера телефонов действительно не будут доступны никому. В ответ на это разработчики Telegram заметили, что данная настройка никогда не работала подобным образом. Также как WhatsApp и Facebook Messenger Telegram основан на телефонных контактах, то есть пользователь должен видеть свои контакты, которые так же используют приложение. Да, настройки позволяют контролировать видимость телефонного номера, однако явно предупреждают, что люди из телефонной книги все равно смогут «видеть» пользователя, даже если тот выберет опцию «Никто».