„Intent Redirection“ pažeidimų taisymas

Ši informacija skirta programų, kuriose yra pažeidimas, susijęs su „Intent Redirection“, kūrėjams.

Kas vyksta

Mažiausiai vienoje jūsų programoje yra „Intent Redirection“ problema, dėl kurios kenkėjiškoms programoms gali būti suteikta galimybė pasiekti privačius programų komponentus ar failus. Jei norite išspręsti su programomis susijusią problemą, peržiūrėkite toliau išsamiai aprašytus veiksmus. Praėjus Play Console nurodytiems terminams, visos programos, kuriose yra nepataisytų saugumo pažeidimų, bus 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 ir iki kada reikia išspręsti šias problemas.
  2. Atnaujinkite paveiktas programas atlikdami toliau nurodytus veiksmus.
  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 pranešimą el. paštu.

Papildoma informacija

Naudoti nepatikimą tikslą, kad būtų paleistas komponentas (pvz., iškvietus startActivity) ar pateikti duomenys (pvz., iškvietus setResult), yra pavojinga ir dėl to kenkėjiškos programos gali sukelti toliau nurodytų problemų. 

  1. Pavogti neskelbtinus failus ar sistemos duomenis (pvz., SMS pranešimus) iš programos.
  2. Paleisti programos privačius komponentus su pažeistais argumentais.

Svarbu, kad programoje nebūtų iškviečiama startActivity, startService, sendBroadcast arba setResult, naudojant nepatikimus tikslus, jų nepatvirtinus ar neišvalius.

Apsisaugoti nuo šio pažeidimo rekomenduojame vienu iš toliau nurodytų būdų.

1 būdas. Padarykite paveiktos programos komponentą, iš kurio nukreipiamas išskirtas ketinimas, privatų.

Jei paveiktos programos komponentui nebūtina gauti ketinimų iš kitų programų, galite padaryti tą programos komponentą privatų apraše nustatydami android:exported=”false”.

2 būdas. Įsitikinkite, kad išskirtas ketinimas yra gautas iš patikimo šaltinio.

Galite patikrinti, ar pirmine veikla galima pasikliauti, naudodami tokius metodus kaip getCallingActivity. Pavyzdys:

 // patikrinkite, ar pradinė veikla yra iš patikimo paketo
 if (getCallingActivity().getPackageName().equals(“known”)) {
   Intent intent = getIntent();
   // išskirkite įdėtą ketinimą
   Intent forward = (Intent) intent.getParcelableExtra(“key”);
   // peradresuokite įdėtą ketinimą
   startActivity(forward);
 }

Pastaba

3 būdas. Įsitikinkite, kad nukreiptinas ketinimas nėra žalingas.

Turite patvirtinti, kad nukreipiamas ketinimas:

  1. nebus siunčiamas nė vienam jūsų programos privačiam komponentui ir
  2. nebus siunčiamas į išorinės programos komponentą. Jei peradresavimas skirtas išorinei programai taikyti, įsitikinkite, kad tikslas nesuteiks URI leidimo vienam iš jūsų programos privataus turinio teikėjų ar sistemos duomenims.

Programos gali patikrinti, kuris komponentas bus naudojamas tvarkant ketinimą, prieš jį nukreipiant, naudodamos tokius metodus kaip resolveActivity. Pavyzdys:

 Intent intent = getIntent();
 // išskirkite įdėtą ketinimą
 Intent forward = (Intent) intent.getParcelableExtra(“key”);
 // gaukite komponento pavadinimą
 ComponentName name = forward.resolveActivity(getPackageManager());
 // patikrinkite, ar naudojami numatyti paketo ir klasės pavadinimai
 if (name.getPackageName().equals(“safe_package”) &&
     name.getClassName().equals(“safe_class”)) {
   // peradresuokite įdėtą ketinimą
   startActivity(forward);
 }

Programos gali patikrinti, ar tikslas suteikia URI leidimą, naudodamos tokius metodus kaip getFlags. Pavyzdys:

 // išskirkite įdėtą tikslą
 Intent forward = (Intent) intent.getParcelableExtra(“key”);
 // gaukite žymas
 int flags = forward.getFlags();
 // patikrinkite, ar įdėtas tikslas nesuteikia URI leidimų
 if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION == 0) &&
     (flags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION == 0)) {
   // peradresuokite įdėtą tikslą
   startActivity(forward);
 }

Programos taip pat gali pašalinti suteiktus URI leidimus naudodamos removeFlags. Pavyzdys:

 // nepatikimas tikslas
 Intent intent = getIntent();
 // pašalinkite suteiktus nepatikimo tikslo URI leidimus
 intent.removeFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
 intent.removeFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
 // perduokite nepatikimą tikslą
 setResult(intent);

Įspėjimų paaiškinimas ir prevencijos parinkties pasirinkimas 

„Play Console“ įspėjimų ataskaitose nurodoma, kur programa iškviečia „startActivity“, „startActivityForResult“, „startService“, „sendBroadcast“ ar „setResult“ naudodama nepatikimą tikslą. Kad geriau suprastumėte, kuri prevencijos parinktis yra tinkamiausia, stebėkite buvusius veiksmus ir peržiūrėkite metodų šaukinius, kad sužinotumėte, kur paleidžiamas nepatikimas tikslas. Pvz., pasirinkę pirmą parinktį, stebėkite buvusius veiksmus, kad nustatytumėte, kurį komponentą padaryti privatų.

Esame pasirengę padėti

Jei kyla su pažeidimais susijusių techninių klausimų, galite juos paskelbti „Stack Overflow“ naudodami ž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
3102888420494483974
true
Paieška pagalbos centre
true
true
true
true
true
5016068
false
false