Перехват неявного намерения

Категория OWASP: MASVS-ПЛАТФОРМА: Взаимодействие платформы

Обзор

Уязвимость перехвата неявного намерения возникает, когда приложение не указывает полное имя класса компонента или пакета при вызове намерения. Это позволяет вредоносному приложению зарегистрировать фильтр намерений для перехвата намерения вместо предполагаемого приложения.

В зависимости от содержимого намерения злоумышленники могут читать или изменять конфиденциальную информацию или взаимодействовать с изменяемыми объектами, такими как изменяемые PendingIntents или Binders .

Перехват неявного намерения также может позволить злоумышленнику выполнять произвольные действия, такие как запуск компонентов, контролируемых злоумышленником.

Влияние

Если неявное намерение обработки конфиденциальных данных передает токен сеанса в дополнительной строке URL-адреса для открытия WebView, любое приложение, определяющее правильные фильтры намерений, может прочитать этот токен. Это может позволить любому правильно настроенному приложению на устройстве перехватить намерение и прочитать находящиеся внутри конфиденциальные данные, позволяя злоумышленникам получить такие данные, как PII или токены сеанса.

Смягчения

Если приложение этого не требует, сделайте намерения явными, вызвав setPackage() . Это позволяет интерпретировать намерение только определенным компонентом (внутри приложения или из других приложений), не позволяя ненадежным приложениям перехватывать данные, отправленные вместе с намерением. В следующем фрагменте показано, как сделать намерение явным:

Котлин

val intent = Intent("android.intent.action.CREATE_DOCUMENT").apply {
    addCategory("android.intent.category.OPENABLE")
    setPackage("com.some.packagename")
    setType("*/*")
    putExtra("android.intent.extra.LOCAL_ONLY", true)
    putExtra("android.intent.extra.TITLE", "Some Title")
}
startActivity(intent)

Ява

Intent intent = new Intent("android.intent.action.CREATE_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");
intent.setPackage("com.some.packagename");
intent.setType("*/*");
intent.putExtra("android.intent.extra.LOCAL_ONLY", true);
intent.putExtra("android.intent.extra.TITLE", "Some Title");
startActivity(intent);

Если вам нужно использовать неявные намерения, опустите любую конфиденциальную информацию или изменяемые объекты, которые вы не хотите раскрывать. Неявные намерения могут потребоваться, когда приложение не имеет точных сведений о том, какое приложение выполнит действие (например, написание электронного письма, фотографирование и т. д.).

Ресурсы