Pull to refresh

Уязвимость в Xamarin для Android: подменяем dll и едим бесплатно

Reading time 2 min
Views 28K

Введение


Эта история началась еще прошлым летом: мы с друзьями ночью зашли в заведение быстрого питания, которое только-только внедрило мобильное скидочное приложение. Приложение было установлено, бесплатная еда получена, трафик сохранен в .pcap-файл, и, естественно, было желание покопаться в нем, узнать, как оно работает. Программа оказалась написана на C# с использованием мультиплатформенного фреймворка для разработки мобильных приложений Xamarin; в то время apktool не мог правильно собрать измененный apk и завершался с ошибкой. Долгое время я пользовался этим приложением, накапливал баллы, тратил их, иногда натыкаясь на посты о накрутках на форумах, однако, аккаунты накрутчиков довольно быстро банили.

Азарт и желание что-то исследовать, как это обычно у меня случается, не появляется из ниоткуда. На этот раз спонсором выступил вор, который упер у меня кошелек со всеми банковскими карточками, и у меня не было иного выхода, кроме как купить себе обед в этом заведении, предварительно накрутив баллы. Да и кофе я, в отличие от @Chikey, не люблю. Однако, статья совсем не об этом.

image
Измененное название чрезвычайно похоже на настоящее название заведения

Приложение


Как я уже говорил, приложение написано на C# и скомпилировано с использованием Xamarin. Сколько бы я не пробовал, у меня не получилось перепаковать приложение так, чтобы оно осталось работоспособным. Перепаковка средствами apktool сразу давала только черный экран, обновление измененных файлов в apk-файле через zip-упаковщики тоже не давало нужного результата. В какой-то момент, установив еще одну сломанную сборку, я заметил, что фреймворк пытается подгрузить измененные нерабочие dll не только из apk, но и с SD-карты по следующему пути:
/storage/sdcard0/Android/data/app_id/files/.__override__/

Как можно заметить, этот путь не в Secure Storage, и любое приложение может записывать файлы по этому пути без особых привилегий. Вредоносное приложение может положить зараженные файлы (например System.dll и Mono.Android.dll, которые есть в любой поставке приложения с Xamarin), и они будут использоваться вместо .dll внутри apk. Это поведение исправлено только в Xamarin 5.1 и новее, предыдущие версии фреймворка всегда ставят в приоритет библиотеки с карты библиотекам внутри пакета. Злоумышленник может поместить модифицированные библиотеки, которые изменяют логику работы программы, записывают действия пользователя или подменяют вводимые данные, в указанную директорию, а программа и не заметит подмены.

Уязвимость успешно эксплуатируется на 4 популярных приложениях и 1 мобильном банк-клиенте. Все разработчики, которым было сообщено об уязвимости, обновили свое ПО.

Что делать?


Если вы используете Xamarin в своих Android-приложениях, пересоберите его с последней версией фреймворка, в release-режиме и без debug-символов.

Сообщение в рассылке Full Disclosure.

Так и едим.
Tags:
Hubs:
+25
Comments 18
Comments Comments 18

Articles