Te informacije so namenjene razvijalcem aplikacij, ki vsebujejo ranljivost zaradi prečkanja poti.
Kaj se dogaja?
Google Play je 16. januarja 2018 začel blokirati objavo vseh novih aplikacij ali posodobitev, ki vsebujejo ranljivost zaradi prečkanja poti. Preberite obvestilo v Konzoli Play. Morebitne aplikacije, ki imajo po rokih, navedenih v Konzoli Play, še vedno varnostne ranljivosti, bodo morda odstranjene iz Googla Play.
Potrebno ukrepanje
- Prijavite se v Konzolo Play in pojdite v razdelek Opozorila, kjer si lahko ogledate aplikacije, na katere se to nanaša, in roke, do katerih je treba odpraviti težave.
- Posodobite aplikacije, ki jih to zadeva, in odpravite ranljivost.
- Pošljite posodobljene različice aplikacij, ki jih to zadeva.
Ko aplikacijo znova pošljete, jo bomo spet pregledali. Ta postopek lahko traja več ur. Če aplikacija uspešno opravi pregled in je objavljena, ni potrebno dodatno ukrepanje. Če pregled ni uspešen, nova različica aplikacije ne bo objavljena in boste prejeli e-poštno obvestilo.
Dodatne informacije
Izvedbe elementa openFile v izvoženih ponudnikih ContentProviders so lahko ranljive, če dohodnih parametrov Uri-jev ne preverijo pravilno. Zlonamerna aplikacija lahko posreduje ustrezno oblikovan Uri (na primer takega, ki vsebuje »/../«) in vašo aplikacijo pretenta, da vrne ParcelFileDescriptor za datoteko zunaj nameravanega imenika. Zlonamerna aplikacija lahko tako dostopa do vseh datotek, do katerih ima dostop vaša aplikacija.
Priporočamo dve strategiji za odpravljanje ranljivost zaradi prečkanja poti v ponudniku ContentProvider.
1. Če drugim aplikacijam ni treba videti ponudnika ContentProvider:
- Oznako <provider> zadevnega ponudnika ContentProvider lahko v manifestu spremenite tako, da nastavi android:exported=”false”. S tem drugim aplikacijam preprečite, da bi zadevnemu ponudniku ContentProvider pošiljale namene.
- Poleg tega lahko atribut android:permission nastavite tako, da je dovoljenje z možnostjo android:protectionLevel=“signature”, kar aplikacijam, ki so jih razvili drugi razvijalci, prepreči pošiljanje namenov zadevnemu ponudniku ContentProvider.
2. Če morajo druge aplikacije videti vašega ponudnika ContentProvider:
Pravilno morate zagotoviti, da vnosi v openFile, ki vsebujejo znake za prečkanje poti, ne povzročijo, da bi aplikacija vrnila nepričakovane datoteke. To lahko storite s preverjanjem kanonične poti datoteke. Primer:
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);
}
Pomembno: upoštevajte, da klicanje getLastPathSegment v parametru Uri ni varno. Zlonamerna aplikacija lahko na primer posreduje kodiran Uri, kot je %2F..%2F..path%2Fto%2Fsecret.txt, , tako da bo rezultat za getLastPathSegment: /../../path/to/secret.txt. Naslednja izvedba na primer še vedno omogoča napad.
public ParcelFileDescriptor openFile(Uri uri, String mode){
File f = new File(DIR, uri.getLastPathSegment());
return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
Tu smo, da vam pomagamo
Če imate tehnična vprašanja glede ranljivosti, jih objavite v skupnosti Stack Overflow in uporabite oznako »android-security«. Če potrebujete pojasnilo postopka, ki ga morate uporabiti za odpravljanje te težave, se lahko obrnete na skupino za podporo razvijalcem.