Kelio apėjimo pažeidimas

Ši informacija skirta programų, kuriose kelio apėjimo pažeidimas, kūrėjams.

Kas vyksta

Nuo 2018 m. sausio 16 d. „Google Play“ pradėjo blokuoti skelbiamas naujas programas ar naujinius, kuriuose bus kelio apėjimo pažeidimas. Žr. pranešimą sistemoje „Play Console“Praėjus „Play Console“ nurodytiems terminams, visos programos, kuriose yra nepataisytų saugos pažeidimų, gali būti pašalintos iš „Google Play“.

Būtini veiksmai​

  1. Prisijunkite prie „Play Console“ ir nuėję į skiltį „Įspėjimai“ peržiūrėkite, kurios programos yra paveiktos, bei iki kada reikia išspręsti šias problemas.
  2. Atnaujinkite paveiktas programas ir pataisykite pažeidimą.
  3. Pateikite atnaujintas paveiktų programų versijas.

Pateikus iš naujo, programa bus peržiūrėta dar kartą. Tai gali užtrukti kelias valandas. Jei programa po peržiūros įvertinama kaip tinkama ir sėkmingai paskelbiama, kitų veiksmų imtis nereikia. Jei programa po peržiūros įvertinama kaip netinkama, nauja jos versija skelbiama nebus, o jūs gausite el. pašto pranešimą.

Papildoma informacija

Eksportuotose klasėse „ContentProvider“ įdiegti elementai „openFile“ gali būti pažeidžiami, jei jais tinkamai nepatvirtinami gaunami URI parametrai. Kenkėjiška programa gali teikti sukurtą URI (pvz., tą, kurioje yra „/../“), kad apgaule priverstų jūsų programą pateikti failo, kuris yra ne numatytame kataloge, elementą „ParcelFileDescriptor“, todėl kenkėjiškai programai leidžiama pasiekti bet kurį failą, kurį gali pasiekti jūsų programa.

Yra dvi rekomenduojamos strategijos, kurias taikant galima pašalinti kelio apėjimo pažeidimą klasėje „ContentProvider“.

1. Jei klasės „ContentProvider“ nereikia atskleisti kitoms programoms:

2. Jei klasę „ContentProvider“ reikia atskleisti kitoms programoms:

Turite tinkamai užtikrinti, kad dėl „openFile“ įvesčių, kuriose yra kelio apėjimo simbolių, programa nepateiktų netikėtų failų. Tai galite padaryti patikrinę failo kanoninį kelią. Toliau pateikti pavyzdžiai.

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);
}
 

Įspėjimai: atminkite, kad nesaugu iškviesti URI parametrą „getLastPathSegment“. Kenkėjiška programa gali pateikti koduotą URI kelią, pvz., %2F..%2F..path%2Fto%2Fsecret.txt, todėl „getLastPathSegment“ rezultatas bus /../../path/to/secret.txt. Pavyzdžiui, toliau nurodytas diegimo pavyzdys vis tiek yra pažeidžiamas.

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Esame pasirengę padėti

Jei kyla su pažeidimais susijusių techninių klausimų, galite juos paskelbti „Stack Overflow“ ir naudoti žymą „android-security“. Jei reikia daugiau informacijos apie veiksmus, kuriuos turite atlikti, kad išspręstumėte šią problemą, galite susisiekti su mūsų kūrėjų palaikymo komanda.

false
Pagrindinis meniu
7157589906035128388
true
Paieška pagalbos centre
true
true
true
true
true
5016068
false
false