Как устранить уязвимость, связанную с неявным намерением PendingIntent

Эта статья предназначена для разработчиков приложений, которые содержат уязвимое неявное намерение PendingIntent.

Суть проблемы

В одном или нескольких ваших приложениях есть неявное намерение PendingIntent, которое может вызывать угрозы безопасности в виде атак типа "отказ в обслуживании", кражи персональных данных и повышения привилегий. Чтобы устранить уязвимость, выполните описанные ниже действия. Информацию о расположении используемых неявных намерений PendingIntent в вашем приложении можно найти в уведомлении Play Console. Если в конце пути указано: "(в динамически загружаемом коде)", то расположение динамически загружается приложением или библиотеками, которые оно использует. Как правило, код загружается динамически через загрузку по запросу. Существуют и другие методы, но мы не рекомендуем ими пользоваться, поскольку некоторые из них нарушают правила Google Play. Кроме того, код приложения можно преобразовать в динамически загружаемый.

Мы рекомендуем устранить эту уязвимость, но это необязательно, так как ее наличие никак не повлияет на статус публикации приложения.

Сведения об уязвимости

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

Намерения PendingIntent делегируются другому приложению, чтобы их можно было доставить в будущем. Создание неявного объекта intent, упакованного в намерение PendingIntent, – это уязвимость безопасности, которая может привести к атаке типа "отказ в обслуживании", краже персональных данных и повышению привилегий.

Дальнейшие действия

1. Обновите приложение и устраните проблему, связанную с неявным намерением PendingIntent, с помощью указанных ниже действий.

В коде приложения найдите, где создано намерение PendingIntent. В примере ниже создано намерение PendingIntent, упакованное в неявный объект intent:

// Создать неявное базовое намерение и упаковать его в PendingIntent

Intent base = new Intent("ACTION_FOO");

base.setPackage("some_package");

PendingIntent pi = PendingIntent.getService(this, 0, base, 0);

Мы рекомендуем разработчикам исправить эту уязвимость, применив один из следующих методов (или, что ещё лучше, все):

  • Убедитесь, что заданы все поля действия, пакета и компонента базового намерения.
  • Убедитесь, что намерение PendingIntent доставляется только доверенным компонентам.
  • Используйте FLAG_IMMUTABLE (добавлено в SDK 23) для создания намерений PendingIntent. Благодаря этому приложения, получающие намерение PendingIntent, не смогут заполнять пустые свойства. Если приложение установлено на устройства с SDK версии 22 или более старой, мы рекомендуем применять указанные выше методы и усиливать создание намерения PendingIntent с помощью следующего шаблона кода:

if (android.os.Build.VERSION.SDK_INT >= 23) {

  // Создать намерение PendingIntent с помощью FLAG_IMMUTABLE

} else {

  // Существующий код, который создает намерение PendingIntent

}

2. Отправьте обновленный APK-файл.

Чтобы отправить обновленный набор App Bundle или файл APK, сделайте следующее:

  1. Откройте Play Console.
  2. Выберите приложение.
  3. Откройте App Bundle Explorer.
  4. В раскрывающемся меню в правом верхнем углу выберите версию приложения с файлом APK или набором App Bundle, в котором нарушены правила, и запомните, к каким выпускам он относится.
  5. Откройте версию тестирования, в которой обнаружено нарушение правил. Появится одна из четырех страниц: "Внутреннее тестирование", "Закрытое тестирование", "Открытое тестирование" или "Рабочая версия".
  6. В правом верхнем углу страницы выберите Создать новый выпуск Возможно, перед этим вам потребуется нажать кнопку "Управлять версией".
    • Если выпуск с APK-файлом, нарушающим правила, сохранен как проект, удалите его.
  7. Добавьте обновленную версию наборов App Bundle или файлов APK.
    • Убедитесь, что версия с нарушениями находится в разделе Не включены. Дополнительные инструкции представлены в разделе "Не включены" этой справочной статьи в Play Console.
  8. Чтобы сохранить изменения в выпуске, выберите Сохранить.
  9. Подготовив версию, нажмите Проверка выпуска.

Если файл APK с нарушениями выпущен в нескольких версиях тестирования, повторите шаги 5–9 для каждой из них.

В этот период и до рассмотрения заявки статус нового приложения или обновления изменится на На рассмотрении. Если приложение не было обновлено в соответствии с требованиями, предупреждение не исчезнет.

Мы всегда готовы помочь

Если у вас есть вопросы о технической стороне уязвимости, задайте их на сайте Stack Overflow, указав тег android-security. Чтобы получить более подробные разъяснения, свяжитесь со службой поддержки.

Эта информация оказалась полезной?

Как можно улучшить эту статью?
false
Главное меню
6602733960548858740
true
Поиск по Справочному центру
true
true
true
true
true
5016068
false
false