Случайным образом, копая очередной BugBounty, я натолкнулся на цепочку уязвимостей в достаточно популярном почтовом клиенте от IT-гиганта Mail.Ru. Эксплуатация уязвимостей из этой цепочки не требовала на устройстве особых прав и могла привести к полной компрометации содержимого почтового ящика жертвы или даже содержимого SD-карты. В статье я опишу методы, с помощью которых были найдены эти уязвимости, вспомогательные тулзы и финальный вектор с демонстрацией на видео.

 

Поехали!

Первым делом понадобится, конечно, девайс (или эмулятор), Android SDK tools, нужный нам APK, drozer и набор мелких утилит для декомпиляции и разбора Java-кода. Но обо всем по порядку.

Первым делом инсталлируем SDK Tools и настраиваем девайс/эмулятор. Я буду рассматривать реальный девайс, но только потому, что мне так удобнее, и вообще — комп с запущенным эмулятором греется! Права рута на устройстве сильно облегчают тебе жизнь, но для нахождения и эксплуатации многих уязвимостей они не требуются.

После настройки SDK Tools скачиваем и устанавливаем drozer из официального репозитория, ставим APK-клиент на устройство. Отлично, связанные с девайсом приготовления закончены, чтобы проверить работоспособность — подключаемся, пробросив порт (это делать необязательно, если используется реальный девайс из твоей сети, а не эмулятор):

$ adb forward tcp:31415 tcp:31415
$ drozer console connect 127.0.0.1

Ну и конечно же, ставим на устройство само приложение почты Mail.Ru, которое будем ломать. Распаковываем и декомпилируем аппликуху при помощи утилиты dex2jar. Для просмотра и поиска по исходникам я советую использовать JD-GUI, ну или можешь взять любой другой редактор кода на твой вкус. Все готово, начинаем ресерч.

Вот так выглядит успешно запущенная консоль drozer’а
Вот так выглядит успешно запущенная консоль drozer’а

INFO


Если хочешь попробовать самостоятельно провернуть все описанные действия в исследовательских целях, выкладываю для тебя именно ту версию APK-шника Mail.Ru, с которой я проводил эксперименты. Качай, пробуй, репорти баги! 🙂
 

Ищем вектор атаки

Теперь дело за малым — найти уязвимости, продумать вектор и написать эксплоит. Начинаем со сканирования приложения: ищем то, за что можно будет зацепиться. Делается это при помощи drozer’а следующим образом:

dz> run app.package.attacksurface ru.mailru.app
could not find the package: ru.mailru.app
dz> run app.package.attacksurface ru.mail.mailapp
Attack Surface:
  26 activities exported
  10 broadcast receivers exported
  2 content providers exported
  14 services exported

Как видишь, у приложения довольно много экспортированных контент-провайдеров, с них я и предлагаю начать поиски. Команда run app.provider.info -a ru.mail.mailapp выведет нам список из двух провайдеров:

ru.mail.mailbox.contacts
ru.mail.mailapp.images.cache

Кстати, можно оставить автоматическое сканирование провайдера drozer’у при помощи команды

dz> run scanner.provider.injection -a ru.mail.mailapp

Но я предпочитаю искать уязвимости руками, поэтому просто пробуем вызывать данный контент-провайдер непосредственно через adb при помощи команды am start, выполненной на устройстве. Повторюсь, так как контент-провайдер экспортирован, права root нам необязательны.

$ adb shell am start -d "content://ru.mail.mailapp.images.cache/image_parameters/0\'"
Starting: Intent { dat=content://ru.mail.mailapp.images.cache/image_parameters/0' }

Как можно увидеть, пользователю предложат выбрать, что же делать с данным URL, какой из Activity запускать. Чтобы избежать подобных вопросов, дополняем команду am параметром -n и указываем нужный нам активити, например ru.mail.mailapp/ru.mail.ui.writemail.SharingActivity. Приложение тут же завершится с ошибкой, а мы топаем в logcat, чтобы узнать, в чем проблема.

Подставляем кавычку, получаем ошибку SQL. Классика!
Подставляем кавычку, получаем ошибку SQL. Классика!

А проблема в том, что это типичная union-based SQL injection, которую можно классическим образом раскрутить и получить вывод (как на экран телефона, так и в системный лог):

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


4 комментария

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Кампания Zealot направлена на серверы под управлением Windows и Linux, чтобы майнить Monero

Аналитики F5 Networks обнаружили сложную вредоносную кампанию по взлому серверов, работающ…