Disse oplysninger er beregnet til udviklere med apps, der er sårbare over for omdirigering af formål.
Hvad sker der?
En eller flere af dine apps indeholder et problem med omdirigering af formål, som betyder, at skadelige apps kan få adgang til private appkomponenter eller filer. Gennemgå den detaljerede vejledning nedenfor for at løse problemet med dine apps. Efter de tidsfrister, der vises i Play Console, fjernes alle apps med sikkerhedsbrister, som ikke er udbedret, fra Google Play.
Handling er påkrævet
- Log ind i Play Console, og gå til afsnittet Underretninger for at se, hvilke apps der er berørt, og tidsfristerne for at løse disse problemer.
- Opdater de berørte apps ved at følge de fremhævede trin nedenfor.
- Indsend de opdaterede versioner af de berørte apps.
Din app gennemgås på ny, når du indsender den igen. Dette kan tage flere timer. Hvis appen består gennemgangen og udgives korrekt, skal du ikke gøre mere. Hvis appen ikke består gennemgangen, udgives den nye appversion ikke, og du modtager en notifikation via mail.
Yderligere oplysninger
Det er risikabelt at bruge et usikkert formål til at starte en komponent (f.eks. ved at kalde startActivity) eller til at hente data (f.eks. ved at kalde setResult), og det kan give skadelige apps mulighed for at forårsage følgende problemer:
- Følsomme filer eller systemdata (f.eks. sms-beskeder) kan blive stjålet fra din app
- Din apps private komponenter kan blive opstartet med forgiftede argumenter
Det er vigtigt, at din app ikke kalder startActivity, startService, sendBroadcast eller setResult via usikre formål uden at validere eller rense disse formål.
Vi anbefaler, at du lukker denne sikkerhedsbrist på en af følgende måder:
Mulighed 1: Gør den berørte appkomponent, som det udtrukne formål omdirigeres fra, privat.
Hvis den berørte appkomponent ikke behøver at modtage formål fra andre apps, kan du gøre den pågældende appkomponent privat ved at angive android:exported=”false” i dit manifest.
Mulighed 2: Sørg for, at det udtrukne formål kommer fra en pålidelig kilde.
Du kan tjekke, om den oprindelige aktivitet er pålidelig, ved hjælp af metoder som f.eks. getCallingActivity. Eksempel:
// Tjek, om den oprindelige aktivitet kommer fra en pakke, der er tillid til
if (getCallingActivity().getPackageName().equals(“known”)) {
Intent intent = getIntent();
// Udtræk det indlejrede formål
Intent forward = (Intent) intent.getParcelableExtra(“key”);
// Omdiriger the indlejrede formål
startActivity(forward);
}
Bemærk!
- Det er ikke nok at tjekke, om getCallingActivity() returnerer en værdi, der ikke er nul, i forhold til at udbedre sikkerhedsbristen. Skadelige apps kan have en nulværdi for denne funktion.
- I forbindelse med Google Play Services SMS Retriever Auth sørger du for, at et formål stammer fra Play-tjenester, når du beskytter en signalmodtager med SEND_PERMISSION.
Mulighed 3: Sørg for, at det formål, der skal omdirigeres, ikke er skadeligt.
Du bør bekræfte, at det omdirigerede formål:
- Ikke sendes til nogen af din apps private komponenter.
- Ikke sendes til en ekstern apps komponent. Hvis omdirigeringen er beregnet til at målrette mod en ekstern app, skal du sørge for, at formålet ikke tildeler en URI-tilladelse til en af din apps private indholdsudbydere eller systemdata.
Apps kan tjekke, hvilken komponent der bruges til at håndtere et formål, før de omdirigerer det ved hjælp af metoder som f.eks. resolveActivity. Eksempel:
Intent intent = getIntent();
// Udtræk det indlejrede formål
Intent forward = (Intent) intent.getParcelableExtra(“key”);
// Hent komponentnavnet
ComponentName name = forward.resolveActivity(getPackageManager());
// Tjek, at pakke- og klassenavnet er, som de skal være
if (name.getPackageName().equals(“safe_package”) &&
name.getClassName().equals(“safe_class”)) {
// Omdiriger det indlejrede formål
startActivity(forward);
}
Apps kan tjekke, om et formål tildeler en URI-tilladelse, ved hjælp af metoder som f.eks. getFlags. Eksempel:
// Udtræk det indlejrede formål
Intent forward = (Intent) intent.getParcelableExtra(“key”);
// Hent flag
int flags = forward.getFlags();
// Tjek, at det indlejrede formål ikke tildeler URI-tilladelser
if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION == 0) &&
(flags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION == 0)) {
// Omdiriger det indlejrede formål
startActivity(forward);
}
Apps kan også fjerne tildelinger af URI-tilladelser ved hjælp af removeFlags. Eksempel:
// Usikkert formål
Intent intent = getIntent();
// Fjern tildelingen af URI-tilladelser i det usikre formål
intent.removeFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.removeFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// Godkend det usikre formål
setResult(intent);
Få indblik i underretninger, og hvordan du vælger en udbedringsmulighed
Play Console-underretningen rapporterer, hvor din app kalder startActivity, startActivityForResult, startService, sendBroadcast eller setResult ved hjælp af et usikkert formål. Du kan få indblik i, hvilken udbedringsmulighed der er mest hensigtsmæssig, ved at tjekke metodekalderne for at finde ud af, hvor det usikre formål stammer fra. Med Mulighed 1 kan du f.eks. tjekke, hvilken komponent der skal gøres privat.
Vi er klar til at hjælpe dig
Hvis du har tekniske spørgsmål om sikkerhedsbristen, kan du skrive dem i et indlæg på Stack Overflow og bruge tagget "android-security". Hvis du vil have hjælp til at løse problemet, kan du kontakte vores supportteam til udviklere.