Как предотвратить инжекцию фрагментов

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

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

С 1 марта 2017 года в Google Play нельзя публиковать приложения и обновления, в которых классы PreferenceActivity уязвимы для инжекции фрагментов. Вам необходимо принять меры до даты, указанной в Play Console. После нее приложения, содержащие уязвимость, могут быть удалены из Google Play.

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

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

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

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

Где можно, установите значение exported=false для класса PreferenceActivity в манифесте. После этого внешние приложения не смогут отправлять намерения этому классу.

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

  1. Неправильная реализация isValidFragment.

Возможно, уязвимый класс содержит или наследует реализацию метода isValidFragment, которая возвращает значение true на всех путях кода. В этом случае обновите класс так, чтобы он проверял список допустимых классов типа Fragment. Например, если PreferenceActivity допускает только классы MyFragment, добавьте следующую проверку:

         public boolean isValidFragment(String fragmentName) {
            return MyFragment.class.getName().equals(fragmentName);

         }

  1. Версия targetSdkVersion ниже 19, и в ней не реализован метод isValidFragment.

Если для targetSdkVersion в манифесте установлено значение меньше 19, а в уязвимом классе не реализован метод isValidFragment then, то уязвимость наследуется от класса PreferenceActivity.

В этом случае вам нужно обновить targetSdkVersion до версии 19 или более поздней. Если сделать это нельзя, реализуйте метод isValidFragment так, как описано выше в пункте 1.

Приложения должны соответствовать условиям Соглашения Google Play о распространении программных продуктов и Правилам в отношении контента

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

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

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

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