Эта статья предназначена для разработчиков, которые используют в своих приложениях небезопасную реализацию классов PreferenceActivity. Она позволяет вредоносным внешним приложениям загружать фрагменты, которые должны быть скрыты.
Что происходит
С 1 марта 2017 года в Google Play нельзя публиковать приложения и обновления, в которых классы PreferenceActivity уязвимы для инжекции фрагментов. Вам необходимо принять меры до даты, указанной в Play Console. После нее приложения, содержащие уязвимость, могут быть удалены из Google Play.
Что нужно сделать
- Чтобы узнать, какие приложения уязвимы и в какой срок нужно решить проблему, войдите в Play Console и откройте раздел "Оповещения".
- Внесите изменения в приложения, затронутые уязвимостью, чтобы устранить ее.
- Опубликуйте обновленные версии приложений.
После этого мы проведем повторную проверку, которая может занять несколько часов. Если мы убедимся, что уязвимость устранена, то опубликуем приложение и дополнительных действий с вашей стороны не потребуется. В противном случае новая версия не будет опубликована, а вы получите уведомление по электронной почте.
Сведения об уязвимости
Где можно, установите значение exported=false для класса PreferenceActivity в манифесте. После этого внешние приложения не смогут отправлять намерения этому классу.
Если уязвимый класс PreferenceActivity нужно экспортировать во внешние приложения, выясните, чем вызвана уязвимость. Причин может быть две:
-
Неправильная реализация isValidFragment.
Возможно, уязвимый класс содержит или наследует реализацию метода isValidFragment, которая возвращает значение true на всех путях кода. В этом случае обновите класс так, чтобы он проверял список допустимых классов типа Fragment. Например, если PreferenceActivity допускает только классы MyFragment, добавьте следующую проверку:
public boolean isValidFragment(String fragmentName) {
return MyFragment.class.getName().equals(fragmentName);
}
-
Версия targetSdkVersion ниже 19, и в ней не реализован метод isValidFragment.
Если для targetSdkVersion в манифесте установлено значение меньше 19, а в уязвимом классе не реализован метод isValidFragment then, то уязвимость наследуется от класса PreferenceActivity.
В этом случае вам нужно обновить targetSdkVersion до версии 19 или более поздней. Если сделать это нельзя, реализуйте метод isValidFragment так, как описано выше в пункте 1.
Приложения должны соответствовать условиям Соглашения Google Play о распространении программных продуктов и Правилам в отношении контента.
Мы всегда рады помочь!
Если у вас есть вопросы, задайте их, используя тег android-security. Чтобы получить более подробные разъяснения, свяжитесь с командой поддержки для разработчиков.