Добрый день. Меня зовут Алексей. Я занимаюсь написанием ботов и реверсом Android приложений с поиском в них уязвимостей.
Мне попало в руки приложение Рамблер/почта для Android. Цель была автоматизировать отправку почты средствами API мобильного приложения. Был запущен эмулятор MEmu и Charles, однако SSL отказывался показать свои запросы. В ход пошел реверс. В файле smali_classes2okhttp3OkHttpClient.smali были сделаны изменения, дабы убрать шифрование.
Далее начат был поиск запросов отвечающих за авторизацию и отправку сообщений. Меня удивило, что авторы приложения при их уровне никак не пытаются себя обезопасить хотя-бы простейшими сигнатурами. Запрос логина выглядит обычно. А вот запрос на отправку крайне любопытен.
action=send¶ms={"to":{"hrthrtjrt12@mail.ru":"hrthrtjrt12@mail.ru"},"body":"<div><br></div>erherh<br>---<br>.","is_html":"1","subject":"ergerg","action":"send","bcc":{},"from":{"eherhregerg@rambler.ru":""},"uploads":[],"cc":{}}
Нам интересен параметр from. Вместо него можно подставить абсолютно любой адрес почты с Рамблера. Вот что приходит на Яндекс:
К счастью у Mail.ru и Yandex есть такая функция как «Служебные заголовки» и в них мы увидим:
Delivered-To: hrthrtjrt12@mail.ru
Return-path: <eherhregerg@rambler.ru>
Да. Технически мы видим реального отправителя, однако для рядового пользователя это скрыто и может стать средством фишинга.
Дальше больше. 1 аккаунт удалось загнать в бан с других аккаунтов просто добавив его адрес в поле from при отправке, письма от него не приходили. Однако если при отправке с этого «забаненного» аккаунта в поле From подставить любое другое мыло, то письма пойдут. Таким образом, мы понимаем, что Rambler считает отправителем юзера из поля from, а не реального.
В данный момент техническая поддержка Рамблера уже оповещена об уязвимости. Однако они ее таковой не считают. Цитирую:
Подобные попытки подмены и мобильных приложений Yandex и Mail.ru не сработали. К счастью, эти компании не такие «креативные». В их мобильных приложениях тоже есть уязвимости, но об этом в следующей статье. Надо же сперва оповестить разработчиков.
Данная статья — попытка исправить ситуацию и все таки признать это багом. Благодарю за внимание.
Автор: pr3dat0r