Šī informācija ir paredzēta tādu lietotņu izstrādātājiem, kurās ir ceļa apvada ievainojamība.
Problēma
Sākot no 2018. gada 16. janvāra, pakalpojumā Google Play tiek liegta jebkuru jaunu lietotņu vai atjauninājumu publicēšana, kuros ir ceļa apvada ievainojamība. Lūdzu, skatiet paziņojumu savā Play Console kontā. Pēc jūsu Play Console kontā norādītajiem termiņiem no pakalpojuma Google Play var tikt noņemtas visas lietotnes, kurās nebūs novērsta drošības ievainojamība.
Nepieciešamā rīcība
- Pierakstieties savā Play Console kontā un sadaļā “Brīdinājumi” skatiet ietekmētās lietotnes un termiņus šo problēmu novēršanai.
- Atjauniniet savas ietekmētās lietotnes un novērsiet ievainojamību.
- Iesniedziet savu ietekmēto lietotņu atjauninātās versijas.
Pēc atkārtotas iesniegšanas jūsu lietotne tiks vēlreiz pārskatīta. Šis process var ilgt vairākas stundas. Ja pēc pārskatīšanas lietotne tiek apstiprināta un veiksmīgi publicēta, vairs nav jāveic nekādas darbības. Ja pēc pārskatīšanas lietotne netiek apstiprināta, tās jaunā versija netiek publicēta un jums tiek nosūtīts paziņojums pa e-pastu.
Papildinformācija
Vienuma openFile ieviešanas gadījumi eksportētajā vienumā ContentProviders var būt ievainojami, ja tie nepareizi validē ienākošos URI parametrus. Ļaunprātīga lietotne var nodrošināt īpaši izstrādātu URI (piemēram, tādu, kas satur “/../”), lai mudinātu jūsu lietotni atgriezt vienumu ParcelFileDescriptor failam, kas atrodas ārpus paredzētā direktorija, tādējādi atļaujot ļaunprātīgajai lietotnei piekļūt jebkuram failam, kas ir pieejams jūsu lietotnei.
Ir ieteicamas divas stratēģijas, kā samazināt ceļa apvada ievainojamību vienumā ContentProvider.
1. Ja jūsu vienumam ContentProvider nav jābūt redzamam citām lietotnēm
- Savā manifestā varat pārveidot ietekmētā vienuma ContentProvider tagu provider>, lai iestatītu android:exported=”false”. Tādējādi tiks novērsta nolūku sūtīšana no citām lietotnēm uz attiecīgo vienumu ContentProvider.
- Varat arī iestatīt, lai atribūts android:permission būtu permission (atļauja) ar vienumu android:protectionLevel=“signature”, tādējādi novēršot nolūku sūtīšanu no citu izstrādātāju lietotnēm uz attiecīgo vienumu ContentProvider.
2. Ja jūsu vienumam ContentProvider ir jābūt redzamam citām lietotnēm
Jums ir pareizi jānodrošina, ka ievades dēļ vienumā openFile, kas satur ceļa apvada rakstzīmes, jūsu lietotne nedrīkst atgriezt neparedzētus failus. Varat to izdarīt, pārbaudot faila kanonisko ceļu. Piemēri:
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);
}
Brīdinājumi. Ņemiet vērā, ka getLastPathSegment izsaukšana URI parametrā nav droša. Ļaunprātīga lietotne var nodrošināt kodētu URI ceļu, piemēram, %2F..%2F..path%2Fto%2Fsecret.txt, līdz ar to getLastPathSegment rezultāts būs /../../path/to/secret.txt. Piemēram, tālāk norādītais ieviešanas gadījums joprojām nav aizsargāts pret uzbrukumu.
public ParcelFileDescriptor openFile(Uri uri, String mode){
File f = new File(DIR, uri.getLastPathSegment());
return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
Mēs jums palīdzēsim
Ja jums ir tehniski jautājumi par ievainojamību, varat tos publicēt vietnē Stack Overflow, izmantojot atzīmi “android-security”. Lai uzzinātu, kā novērst šo problēmu, varat sazināties ar mūsu izstrādātāju atbalsta komandu.