Категория > Новости > 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() }}@Synchronizedfun criticalSection() {println("Starting!")Thread.sleep(10)println("Ending!")}Два потока в этом примере выполнят код функции последовательно, один за другим: Starting!Ending!Starting!Ending!Однако если мы заменим потоки корутинами, то все изменится: val scope =CoroutineScope(Job())repeat(2) {scope.launch {criticalSectionsuspending() }}@Synchronizedsuspend fun criticalSectionsuspending() {println("Starting!")delay(10)println("Ending!")}Вывод будет таким: Starting!Starting!Ending!Ending!Другими словами, аннотация На самом деле объяснение в том, что обе корутины в данном примере работают в одном потоке. А это влечет за собой два следствия:
Другими словами, Перейти обратно к новости |