android:exported

Категория OWASP: MASVS-PLATFORM: взаимодействие с платформой.

Обзор

Атрибут android:exported определяет, могут ли компоненты других приложений запускать компонент (действие, сервис, широковещательный приемник и т. д.).

  • Если задано значение true, любое приложение может получить доступ к объекту activity и запустить его по точному названию класса.
  • Если задано значение false, запустить действие могут только компоненты того же приложения, приложения с тем же идентификатором пользователя или привилегированные системные компоненты.

Логика, определяющая значение по умолчанию для этого атрибута, со временем менялась и зависела от типов компонентов и версий Android. Например, на уровне API 16 (Android 4.1.1) или ниже значение для элементов <provider> по умолчанию равно true. Если не задать этот атрибут, на разных устройствах могут использоваться разные значения по умолчанию.

Влияние

Из-за разных значений по умолчанию вы можете случайно открыть доступ к внутренним компонентам приложения. Вот несколько примеров:

DoS-атаки. Другие приложения могут получить несанкционированный доступ к внутренним компонентам и изменить внутренние функции вашего приложения. Утечка конфиденциальных данных. Выполнение кода в контексте уязвимого приложения.

Предотвращение атак

Всегда явно задавайте атрибут android:exported. Это позволит избежать недопонимания и четко обозначить ваши намерения в отношении видимости компонента.