Last updated
Last updated
Инструмент для взаимодействия между компонентами приложений.
Позволяет передать Intent другому приложению, которое сможет его выполнить, как будто его выполняет первое приложение (т.е. с теми же permissions). Это позволяет другим приложения возвращать информацию private компонентам родительского приложения. Внешнее приложение, если оно вредоносное, может попытаться повлиять на родительское приложение и/или данные/целостность
Использовать PendingIntent как отложенные функции возврата для private BroadcastReceivers или broadcast activities, и указывать полное имя компонента в базовом Intent
Основная причина: недостаточная валидация информации, передаваемой через интенты
В примере ниже в PendingIntent передается пустой интент. Если такой PendingIntent попадет к приложению атакующего, то он сможет выполнить любой код в пространстве уязвимого приложения (через send отправляем свой интент к любому компоненту (даже приватному)). Чтобы такого не было, надо в PendingIntent отправлять Intent с указанием action или компонента. Тогда интент придет именно компоненту-отправителю.
Поведение здесь следующее: Intent() определяет компонент, который будет обрабатывать ответ. Ранее (скорее всего до Android 5) пустой интент переопределялся интентом-ответом. Сейчас так не работает - интент уходит вникуда.
Уязвимость заключается в недостаточной валидации вложенных интентов