Tiltak for å løse sikkerhetsproblemet med intensjonsviderekobling

Denne informasjonen er beregnet på utviklere med apper som har et sikkerhetsproblem med intensjonsviderekobling.

Hva skjer?

Én eller flere av appene dine inneholder et problem med intensjonsviderekobling som kan gi skadelige apper tilgang til private appkomponenter eller -filer. Gå gjennom trinnene nedenfor for å løse problemet med appene dine. Alle apper som inneholder uløste sikkerhetsproblemer, kan bli fjernet fra Google Play etter tidsfristene som vises i Play-konsollen.

Dette må du gjøre​

  1. Logg på Play-konsollen, og gå til Varsler-delen for å se hvilke apper som er berørt, samt tidsfristene for å løse disse problemene.
  2. Oppdater de berørte appene dine ved å følge trinnene nedenfor.
  3. Send inn de oppdaterte versjonene av de berørte appene.

Hvis du sender apper inn igjen, blir de vurdert på nytt. Denne prosessen kan ta flere timer. Hvis appene godkjennes etter gjennomgangen og publiseres, trenger du ikke å gjøre noe mer. Hvis de ikke godkjennes, blir ikke de nye appversjonene publisert, og du mottar et varsel på e-post.

Flere detaljer

Bruk av ikke-klarerte intensjoner til å starte komponenter (for eksempel med startActivity) eller returnere data (for eksempel med setResultat) er farlig, og dette kan føre til at skadelige apper 

  1. stjeler sensitive filer eller systemdata (f.eks. SMS-er) fra appen din
  2. starter private komponenter i appen din med skadelige argumenter

Det er viktig at appen din ikke bruker startActivity, startService, sendBroadcast eller setResultat for ikke-klarerte intensjoner uten først å validere eller sanere intensjonene.

Vi anbefaler at du forhindrer dette sikkerhetsproblemet på én av disse måtene:

Alternativ 1: Gjør den berørte appkomponenten (som den utpakkede intensjonen viderekobles fra) privat.

Hvis den berørte appkomponenten ikke trenger å motta intensjoner fra andre apper, kan du gjøre appkomponenten privat ved å angi android:exported="false" i manifestet.

Alternativ 2: Forsikre deg om at den utpakkede intensjonen kommer fra en pålitelig kilde.

Du kan bekrefte at opphavsaktiviteten er pålitelig, ved å bruke metoder som getCallingActivity. Eksempel:

 // sjekk om opphavsaktiviteten (Activity) kommer fra en pålitelig pakke
 if (getCallingActivity().getPackageName().equals(“known”)) {
   Intent intent = getIntent();
   // hent ut den flettede intensjonen
   Intent forward = (Intent) intent.getParcelableExtra(“key”);
   // viderekoble den flettede intensjonen
   startActivity(forward);
 }

Merk:

  • Det er ikke nok å sjekke om getCallingActivity() returnerer en verdi som ikke er null, for å forhindre sikkerhetsproblemet. Skadelige apper kan levere en nullverdi for denne funksjonen.
  • Google Play Services SMS Retriever Auth: Hvis du beskytter en mottaker med SEND_PERMISSION, sikrer det at intensjonen kommer fra Play Tjenester.

Alternativ 3: Forsikre deg om at den viderekoblede intensjonen ikke er skadelig.

Du bør bekrefte at den viderekoblede intensjonen

  1. ikke sendes til noen av appens private komponenter
  2. ikke sendes til eksterne appers komponenter – hvis viderekoblingen er målrettet mot en ekstern app, må du sørge for at intensjonen ikke gir URI-tillatelser til en av appens private innholdsleverandører eller systemdata

Apper kan sjekke hvilke komponenter som skal brukes til å håndtere intensjonen, før den viderekobles, ved å bruke metoder som resolveActivity. Eksempel:

 Intent intent = getIntent();
 // hent ut den flettede intensjonen
 Intent forward = (Intent) intent.getParcelableExtra(“key”);
 // hent komponentnavnet
 ComponentName name = forward.resolveActivity(getPackageManager());
 // sjekk at pakkenavnet og klassenavnet er som de skal
 if (name.getPackageName().equals(“safe_package”) &&
     name.getClassName().equals(“safe_class”)) {
   // viderekoble den flettede intensjonen
   startActivity(forward);
 }

Apper kan sjekke om intensjoner gir URI-tillatelser, ved å bruke metoder som getFlags. Eksempel:

 // hent ut den flettede intensjonen
 Intent forward = (Intent) intent.getParcelableExtra(“key”);
 // hent flaggene
 int flags = forward.getFlags();
 // sjekk at den flettede intensjonen ikke gir URI-tillatelser
 if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION == 0) &&
     (flags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION == 0)) {
   // viderekoble den flettede intensjonen
   startActivity(forward);
 }

Apper kan også fjerne gitte URI-tillatelser med removeFlags. Eksempel:

 // ikke-klarert intensjon
 Intent intent = getIntent();
 // fjern den gitte URI-tillatelsen i den ikke-klarerte intensjonen
 intent.removeFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
 intent.removeFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
 // send den ikke-klarerte intensjonen
 setResult(intent);

Forklaring av varsler og valg av alternativer for forebygging 

Varsler i Play-konsollen rapporterer hvor appen din bruker startActivity, startActivityForResult, startService, sendBroadcast eller setResult med en ikke-klarert intensjon. For å få en bedre forståelse av hvilket alternativ for forebygging som er best egnet, kan du gå tilbake og se på tilbakekallere av metoder for å finne ut hvor den ikke-klarerte intensjonen kommer fra. For alternativ 1 kan du for eksempel gå tilbake for å bestemme hvilken komponent som skal gjøres privat.

Vi hjelper deg gjerne

Hvis du har tekniske spørsmål om sikkerhetsproblemet, kan du skrive et innlegg på Stack Overflow og bruke «android-security»-etiketten. Hvis du vil ha mer informasjon om hva du må gjøre for å løse dette problemet, kan du kontakte brukerstøtteteamet for utviklere.

false
Hovedmeny
16218834281109533542
true
Søk i brukerstøtte
true
true
true
true
true
5016068
false
false