Ranljivost zaradi prečkanja poti

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

  1. 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.
  2. Posodobite aplikacije, ki jih to zadeva, in odpravite ranljivost.
  3. 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:

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.

false
Glavni meni
9184956813205608725
true
Iskanje v centru za pomoč
true
true
true
true
true
5016068
false
false