Категория > Новости > Android: уязвимости PendingIntent и трекинговые библиотеки - «Новости»
Android: уязвимости PendingIntent и трекинговые библиотеки - «Новости»1-12-2021, 00:02. Автор: Герасим |
Re-route Your Intent for Privilege Escalation — презентация с Black Hat Europe 2021, посвященная уязвимостям, связанным с использованием так называемых PendingIntent в приложениях для Android. Интенты (intent) — одна из ключевых идей Android. Интенты позволяют пересылать сообщения между компонентами приложений и системных сервисов с целью вызвать определенное действие. Запускаются приложения, открываются ссылки, инициируются звонки и многое другое в Android делается с помощью интентов. Поверх интентов построен другой механизм — отложенные интенты (PendingIntent). Он позволяет передать интент другому приложению или компоненту системы, чтобы то могло отправить интент от имени передавшего его приложения. Проблема отложенных интентов только в том, что в ряде случаев можно изменить записанный в них интент (это можно сделать, если не установлен флаг Отложенные интенты чаще всего используются в следующих компонентах:
В качестве примера уязвимости в одном из этих компонентов приведем CVE-2020-0188. Это уязвимость в SliceProvider’е стандартных настроек Android. Благодаря тому что PendingIntent был открыт для изменения, его можно было вытащить с помощью
Intent hijackIntent =new Intent();
hijackIntent.setPackage(getPackageName());
hijackIntent.setDataAndType(Uri.parse("content://com.android.settings.files/my_cache/NOTICE.html"), "txt/html");
hijackIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
pi.send(getApplicationContext(),0,hijackIntent,null,null);
По сути, этот код заставляет приложение «Настройки» передать ссылку на свой внутренний файл с правами на чтение и запись приложению‑эксплоиту. Остается только принять интент, и можно делать с файлом все, что угодно. Рекомендации разработчикам:
Анализ использования трекинговых библиотек в приложенияхAre iPhones Really Better for Privacy? Comparative Study of iOS and Android Apps — исследование использования трекинговых библиотек в приложениях для Android и iOS. Авторы работы взяли 12 тысяч приложений для каждой платформы, проанализировали их код и сетевые подключения и пришли к следующим выводам:
Сравнительная таблица использования трекинговых библиотек Самые запрашиваемые разрешения РазработчикуСинхронизация корутинCoroutines and Java Synchronization Don’t Mix — небольшая заметка о неочевидной для некоторых программистов особенности взаимодействия корутин Kotlin и блокировок. Все мы знаем об аннотации
repeat(2) {
thread {criticalSection() }
}
@Synchronized
fun criticalSection() {
println("Starting!")
Thread.sleep(10)
println("Ending!")
}
Два потока в этом примере выполнят код функции последовательно, один за другим:
Starting!
Ending!
Starting!
Ending!
Однако если мы заменим потоки корутинами, то все изменится:
val scope =CoroutineScope(Job())
repeat(2) {
scope.launch {criticalSectionsuspending() }
}
@Synchronized
suspend fun criticalSectionsuspending() {
println("Starting!")
delay(10)
println("Ending!")
}
Вывод будет таким:
Starting!
Starting!
Ending!
Ending!
Другими словами, аннотация На самом деле объяснение в том, что обе корутины в данном примере работают в одном потоке. А это влечет за собой два следствия:
Другими словами, Перейти обратно к новости |