Как устранить уязвимость к перехвату схемы намерения

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

Что происходит

Одно или несколько ваших приложений уязвимы перед перехватом схемы намерения. Вредоносные сети и сайты могут воспользоваться этим и получить доступ к закрытым компонентам приложений. Вам необходимо принять меры до даты, указанной в Play Console. После нее приложения, содержащие уязвимость, будут удалены из Google Play.

Что нужно сделать

  1. Чтобы узнать, какие приложения уязвимы и как скоро нужно устранить проблему, войдите в Play Console и откройте раздел "Оповещения".

  2. Обновите приложения, следуя приведенным ниже инструкциям.

  3. Опубликуйте обновленные версии приложений.

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

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

Компоненты WebView, которые загружают контент из ненадежных источников, анализируют ссылки с префиксом intent://, используя Intent.parseUri, и отправляют намерения с помощью метода startActivity, уязвимы перед перехватом схемы намерения. Злоумышленники обманным путем могут заставить эти компоненты отправлять произвольные намерения закрытым компонентам приложений. Это может привести к утечке данных с ограниченным доступом. Обратите внимание, что небезопасный контент, который загружается по протоколу HTTP, содержит данные из надежных доменов.

Вы можете устранить уязвимость одним из приведенных ниже способов.

Вариант 1. Запретите компонентам WebView отправлять произвольные намерения

Вы можете установить в приложении ограничения для намерений, созданных с помощью Intent.parseUri. Чтобы такие намерения считались Implicit Intents (неявными) и отправлялись компонентам, допускающим только намерения из категории BROWSABLE, используйте следующий код:

     // convert Intent scheme URL to Intent object
  Intent intent = Intent.parseUri(url);
  // forbid launching activities without BROWSABLE category
  intent.addCategory("android.intent.category.BROWSABLE");
  // forbid explicit call
  intent.setComponent(null);
  // forbid Intent with selector Intent
  intent.setSelector(null);
  // start the activity by the Intent
  view.getContext().startActivity(intent, -1);

Вариант 2. Запретите уязвимым компонентам WebView загружать контент из ненадежных источников

Если компоненту WebView требуется анализировать произвольные URL с префиксом intent://, загрузка контента из ненадежных источников и через незашифрованные соединения должна быть запрещена. Задайте для атрибута android:usesCleartextTraffic значение false или настройте конфигурацию Network Security Config в манифесте, запрещающую получать данные по протоколу HTTP. Также вы можете убедиться, что ни один компонент WebView не использует метод loadUrl для загрузки контента со схемами HTTP.

Кроме того, уязвимые компоненты WebView не должны загружать контент из общедоступных источников (например, URL из небезопасных намерений). 

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

Эта информация оказалась полезной?
Как можно улучшить эту статью?