Тази информация е предназначена за програмисти, чиито приложения използват опасна реализация на класове PreferenceActivity, поради което са уязвими за инжектиране на фрагменти. Такава реализация може да позволи на злонамерено външно приложение да зареди фрагменти, които трябва да са частни.
Какво се случва
От 1 март 2017 г. Google Play започна да блокира публикуването на нови приложения и актуализации, в които класовете PreferenceActivity може да са уязвими към инжектиране на фрагменти. Моля, вижте известието в Play Console. След крайните срокове, показани в Play Console, всички приложения, които съдържат уязвимости в сигурността, може да бъдат премахнати от Google Play.
Изисква се действие
- Влезте в профила си в Play Console и преминете към секцията „Сигнали“, за да видите кои приложения са засегнати и крайните срокове за решаване на тези проблеми.
- Актуализирайте засегнатите приложения и отстранете уязвимостта.
- Изпратете актуализираните версии на засегнатите приложения.
При повторно изпращане приложението ви ще бъде прегледано отново. Този процес може да отнеме няколко часа. Ако приложението премине проверката и бъде публикувано успешно, няма нужда да правите нищо повече. В противен случай новата му версия няма да бъде публикувана и ще получите известие по имейл.
Допълнителни подробности
Където е възможно, посочете exported=false за PreferenceActivity в манифеста на приложението. Това ще попречи на външни приложения да изпращат намерения към този клас.
Ако уязвимият клас PreferenceActivity трябва да бъде експортиран към външни приложения, тогава определете защо е уязвим и вземете необходимите мерки. Има две възможности:
-
Неправилна реализация на isValidFragment:
Проверете дали уязвимият клас съдържа или наследява реализация на isValidFragment, която връща true при всички пътища в кода. Ако е така, актуализирайте класа да проверява списък с допустими класове фрагменти. Например: Ако PreferenceActivity трябва да позволява класове MyFragment и никакви други фрагменти, тогава внедрете такава проверка:
public boolean isValidFragment(String fragmentName) {
return MyFragment.class.getName().equals(fragmentName);
}
-
targetSdkVersion е по-малко от 19 и isValidFragment не е реализирано:
Ако понастоящем в манифеста на приложението targetSdkVersion е със стойност, по-малка от 19, и уязвимият клас не съдържа реализация на isValidFragment, то уязвимостта е наследена от PreferenceActivity.
За да бъде поправено това, програмистите трябва да актуализират targetSdkVersion до стойност 19 или по-голяма. Ако targetSdkVersion не може да се промени, програмистите трябва да внедрят в isValidFragment проверка на допустимите класове фрагменти, както е описано в предишната точка.
Обърнете внимание, че приложенията също така трябва да спазват Споразумението с програмистите относно разпространението и Правилата за съдържанието.
На Ваше разположение сме
Ако имате технически въпроси относно уязвимостта, можете да ги публикувате в Stack Overflow и да използвате маркера android-security. За разяснение на стъпките, които трябва да изпълните, за да решите проблема, можете да се свържете с екипа ни за поддръжка за програмисти.