Ове информације су намењене програмерима са апликацијама које садрже пропуст у вези са приступом путањи.
Шта се дешава
Од 16. јануара 2018. Google Play је почео да блокира објављивање свих нових апликација или ажурирања која садрже пропуст у вези са приступом путањи. Погледајте обавештење у Play конзоли. Уклонићемо из Google Play-а све апликације које и после датума наведених у Play конзоли буду садржале безбедносне пропусте.
Треба да реагујете
- Пријавите се у Play конзолу и идите до одељка Обавештења да бисте видели које апликације су угрожене и рокове за решавање тих проблема.
- Ажурирајте апликације на које се ово односи и исправите пропусте.
- Пошаљите ажуриране верзије апликација на које се ово односи.
Када је поново пошаљете, апликација ће поново бити прегледана. Овај процес може да потраје неколико сати. Ако апликација прође преглед и буде објављена, не треба ништа више да предузимате. Ако апликација не прође преглед, онда нова верзија апликације неће бити објављена, а ви ћете добити обавештење имејлом.
Додатне информације
Примене openFile-a у извезеним ContentProvider-има могу да садрже пропуст ако правилно не потврде долазне URI параметре. Злонамерна апликација може да достави направљен URI (на пример, онај који садржи „/../“) да би преварила вашу апликацију да врати ParcelFileDescriptor за датотеку изван намењеног директоријума и на тај начин злонамерна апликација може да приступи свим датотекама којима ваша апликација има приступ.
Препоручујемо вам две стратегије за уклањање пропуста у вези са приступом путањи у ContentProvider-у.
1. Ако ContentProvider не мора да буде видљив другим апликацијама:
- Можете да измените ознаку <provider> угроженог ContentProvider-а у манифесту да бисте подесили android:exported=”false”. На тај начин ћете спречити да остале апликације шаљу намере угроженом ContentProvider-у.
- Можете и да подесите атрибут android:permission на permission са вредношћу android:protectionLevel=“signature” да бисте спречили да апликације које напишу други програмери шаљу намере угроженом ContentProvider-у.
2. Ако ContentProvider мора да буде видљив другим апликацијама:
Морате на исправан начин да се побринете да апликација не враћа неочекиване датотеке због уноса у openFile-у који садрже знакове приступа путањи. То можете да урадите тако што ћете проверити канонску путању датотеке. На пример:
public ParcelFileDescriptor openFile (Uri uri, String mode)
throws FileNotFoundException {
File f = new File(DIR, uri.getLastPathSegment());
if (!f.getCanonicalPath().startsWith(DIR)) {
throw new IllegalArgumentException();
}
return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
Упозорења: Имајте у виду да позивање getLastPathSegment-а на URI параметру није безбедно. Злонамерна апликација може да достави кодирану URI путању као што је %2F..%2F..path%2Fto%2Fsecret.txt тако да ће резултат getLastPathSegment-а бити /../../path/to/secret.txt. На пример, следећа примена је и даље подложна нападу.
public ParcelFileDescriptor openFile(Uri uri, String mode){
File f = new File(DIR, uri.getLastPathSegment());
return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
Ту смо да помогнемо
Ако имате техничких питања у вези са пропустом, можете да их поставите на Stack Overflow помоћу ознаке „android-security“. Да бисте разјаснили кораке које треба да предузмете да бисте решили овај проблем, можете да контактирате тим подршке за програмере.