Не можешь атаковать шифрование – ищи проблемы в клиенте. Именно таким принципом руководствовался египетский исследователь Мохамед А. Басет (Mohamed A. Baset), когда искал возможность скомпрометировать Telegram. Данная тактика принесла плоды: Басет обнаружил уязвимость в веб-клиенте популярного мессенджера.
В блоге исследователь рассказал, что веб-клиент Telegram оказался не защищен от обыкновенных кликджекинг-атак. Вместо заголовка X-Frame-Options веб-версия мессенджера использовала технику так называемого «выталкивания фреймов» (frame busting), чтобы предотвратить внедрение iframe на сайт.
Воспользовавшись одной из особенностей HTML5, а именно добавив атрибут sandbox к своему iframe, Басен успешно атаковал веб-клиент, обойдя защиту.
Исследователь рассказал, что дополнительно Telegram использовал еще один трюк: через CSS любым тегам HTML присваивалось значение «none», что сводило практически весь успех на нет. Однако Басена это не остановило. «Всё, что нам нужно, это просто заблокировать доступ к файлу стиля, который отвечает за главную страницу веб-приложения», — пишет исследователь. Для предотвращения доступа к https://web.telegram.org/css/app.css Басен предложил реализовать man-in-the-middle атаку или воспользоваться какой-либо другой техникой.
Успешно осуществив вышеописанное, злоумышленник получал возможность изменить конфиденциальные данные залогиненного пользователям Telegram (пароль, email для восстановления данных и так далее). Кроме того, атакующий мог отправлять сообщения от лица скомпрометированного пользователя, посылать запросы контактов и приглашения в группы. Также можно было отметить все сообщения пользователя, как прочитанные, дополнительно эксплуатировав CSRF (cross-site request forgery) баг в клиенте.
На устранение проблемы у разработчиков Telegram ушло около четырех дней. Сегодня, 29 апреля 2016 года, Басет сообщил, что уязвимость была исправлена: теперь веб-клиент использует заголовок X-Frame-Options на стороне сервера.
Фото: Max Fleishman