Ove su informacije namijenjene razvojnim programerima aplikacija koje su izložene napadu prelaskom puta.
Što se događa
Od 16. siječnja 2018. Google Play blokira objavljivanje svih novih aplikacija ili ažuriranja koja su izložena napadu prelaskom puta. Pogledajte obavijest na Play konzoli. Aplikacije koje budu sadržavale neriješene sigurnosne ranjivosti nakon rokova prikazanih na vašoj Play konzoli mogu se ukloniti s Google Playa.
Potrebna je radnja
- Prijavite se na Play konzolu i u odjeljku Upozorenja pogledajte koje su aplikacije podložne ranjivostima i koji su rokovi za rješavanje tih poteškoća.
- Ažurirajte zahvaćene aplikacije i uklonite ranjivosti.
- Pošaljite ažurirane verzije ranjivih aplikacija.
Nakon slanja ponovo ćemo pregledati vašu aplikaciju. Taj postupak može trajati nekoliko sati. Ako aplikacija prođe pregled i uspješno se objavi, ne morate više ništa poduzimati. Ako aplikacija ne prođe pregled, nova verzija aplikacije neće se objaviti i dobit ćete obavijest e-poštom.
Dodatne pojedinosti
Implementacije openFile u izvezenim ContentProviderima mogu biti ranjive ako pravilno ne potvrđuju dolazne parametre URI-ja. Zlonamjerna aplikacija može dostaviti posebno izrađen URI (koji, na primjer, sadrži "/../") kako bi vaša aplikacija na prijevaru vratila ParcelFileDescriptor za datoteku izvan predviđenog direktorija, čime zlonamjernoj aplikaciji omogućuje pristup bilo kojoj datoteci koja je dostupna vašoj aplikaciji.
Dvije su preporučene strategije za uklanjanje ranjivosti na napad prelaskom puta u ContentProvideru.
1. Ako vaš ContentProvider ne mora biti izložen drugim aplikacijama:
- Možete izmijeniti oznaku <provider> pogođenog ContentProvidera u svojem Manifestu da biste postavili android:exported=”false”. To će onemogućiti drugim aplikacijama da šalju namjere pogođenom ContentProvideru.
- Možete i postaviti atribut android:permission na permission uz android:protectionLevel=“signature” da biste onemogućili aplikacijama drugih razvojnih programera da šalju namjere pogođenom ContentProvideru.
2. Ako vaš ContentProvider treba biti izložen drugim aplikacijama:
Morate osigurati da unosi za openFile koji sadrže znakove za prelazak puta ne mogu uzrokovati da vaša aplikacija vraća neočekivane datoteke. Da biste to učinili, provjerite kanonski put datoteke. Na primjer:
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);
}
Upozorenja: napominjemo da pozivanje getLastPathSegment na parametru URI nije sigurno. Zlonamjerna aplikacija može dostaviti kodirani put URI-ja kao što je %2F..%2F..path%2Fto%2Fsecret.txt, pa će rezultat za getLastPathSegment biti /../../path/to/secret.txt. Na primjer, sljedeća je implementacija i dalje izložena napadu.
public ParcelFileDescriptor openFile(Uri uri, String mode){
File f = new File(DIR, uri.getLastPathSegment());
return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
Obratite nam se ako vam zatreba pomoć
Ako imate tehničkih pitanja o toj ranjivosti, možete objaviti post na Stack Overflowu uz oznaku "android-security". Ako vam je potrebno pojašnjenje postupka za rješavanje te poteškoće, možete se obratiti našem timu za podršku razvojnim programerima.