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

Эта статья предназначена для разработчиков, которые используют в своих приложениях небезопасную реализацию классов 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. Чтобы получить более подробные разъяснения, свяжитесь с командой поддержки для разработчиков.

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