Sicherheitslücke bei Intent-Weiterleitungen schließen

Diese Informationen richten sich an Entwickler von Apps, die von der Sicherheitslücke bei Intent-Weiterleitungen betroffen sind.

Aktuelle Informationen

Mindestens eine Ihrer Apps ist von der Sicherheitslücke bei Intent-Weiterleitungen betroffen. Dadurch können sich schädliche Apps Zugriff auf private App-Komponenten oder Dateien verschaffen. Bitte lesen Sie die folgenden detaillierten Schritte, um das Problem in Ihren Apps zu beheben. Nachdem die in der Play Console angezeigten Fristen abgelaufen sind, werden alle Apps, die nicht geschlossene Sicherheitslücken enthalten, von Google Play entfernt.

Erforderliche Maßnahmen

  1. Melden Sie sich in der Play Console an und gehen Sie zum Bereich „Warnmeldungen“. Dort sehen Sie, welche Apps betroffen sind und bis wann Sie diese Probleme beheben müssen.
  2. Aktualisieren Sie die betroffenen Apps mithilfe der unten beschriebenen Schritte.
  3. Reichen Sie aktualisierte Versionen Ihrer betroffenen Apps ein.

Nachdem Ihre App neu eingereicht wurde, wird sie noch einmal überprüft. Dieser Vorgang kann mehrere Stunden dauern. Wenn die App die Überprüfung besteht und veröffentlicht wird, sind keine weiteren Maßnahmen erforderlich. Falls die App die Überprüfung nicht besteht, wird die neue App-Version nicht veröffentlicht und Sie erhalten eine Benachrichtigung per E-Mail.

Weitere Details

Mit einem nicht vertrauenswürdigen Intent eine Komponente zu starten (z. B. durch Aufrufen von startActivity) oder Daten zurückzugeben (z. B. durch Aufrufen von setResult), ist gefährlich und kann dazu führen, dass schädliche Apps folgende Probleme verursachen: 

  1. Vertrauliche Dateien oder Systemdaten (z. B. SMS) können aus Ihrer App gestohlen werden
  2. Vertrauliche Komponenten Ihrer App können mit manipulierten Argumenten gestartet werden

Ihre App sollte für nicht vertrauenswürdige Intents weder startActivity noch startService, sendBroadcast oder setResult aufrufen, ohne diese Intents zu überprüfen oder zu bereinigen.

Wir empfehlen, diese Sicherheitslücke auf eine der folgenden Arten zu schließen:

Option 1: Betroffene App-Komponente, von der der extrahierte Intent weitergeleitet wird, als privat festlegen

Wenn die betroffene App-Komponente keine Intents von anderen Apps empfangen muss, können Sie die Komponente als privat festlegen, indem Sie im Manifest android:exported="false" angeben.

Option 2: Prüfen, ob der extrahierte Intent von einer vertrauenswürdigen Quelle stammt

Mithilfe von Methoden wie getCallingActivity können Sie prüfen, ob die Ausgangsaktivität vertrauenswürdig ist. Beispiel:

 // prüfen, ob die Ursprungsaktivität aus einem vertrauenswürdigen Paket stammt
 if (getCallingActivity().getPackageName().equals("known")) {
   Intent intent = getIntent();
   // verschachtelten Intent extrahieren
   Intent forward = (Intent) intent.getParcelableExtra("key");
   // verschachtelten Intent weiterleiten
   startActivity(forward);
 }

Hinweis:

  • Lediglich zu prüfen, ob „getCallingActivity()“ einen Wert zurückgibt, der nicht null ist, ist nicht ausreichend, um die Sicherheitslücke zu schließen. Schädliche Apps sind in der Lage, dieser Funktion einen Nullwert zuzuführen.
  • Im Fall von Google Play Services SMS Retriever Auth wird durch den Schutz eines Übertragungsempfängers durch SEND_PERMISSION gewährleisetet, dass ein Intent von den Play-Diensten stammt.

Option 3: Prüfen, ob der Intent, der weitergeleitet werden soll, schädlich ist

Sie sollten darauf achten, dass der weitergeleitete Intent

  1. an keine private Komponente Ihrer App gesendet wird und
  2. an keine Komponente einer externen App gesendet wird. Wenn das Ziel der Weiterleitung eine externe App sein soll, achten Sie darauf, dass der Intent keinem der privaten Contentanbieter oder den Systemdaten Ihrer App eine URI-Berechtigung gewährt.

Apps können prüfen, mit welcher Komponente der Intent verarbeitet wird, bevor er mithilfe von Methoden wie resolveActivity weitergeleitet wird. Beispiel:

 Intent intent = getIntent();
 // verschachtelten Intent extrahieren
 Intent forward = (Intent) intent.getParcelableExtra("key");
 // Komponentenname abrufen
 ComponentName name = forward.resolveActivity(getPackageManager());
 // prüfen, ob Paketname und Klassenname wie beabsichtigt lauten
 if (name.getPackageName().equals("safe_package") &&
     name.getClassName().equals("safe_class")) {
   // verschachtelten Intent weiterleiten
   startActivity(forward);
 }

Apps können mithilfe von Methoden wie getFlags prüfen, ob ein Intent eine URI-Berechtigung gewährt. Beispiel:

 // verschachtelten Intent extrahieren
 Intent forward = (Intent) intent.getParcelableExtra("key");
 // Flags abrufen
 int flags = forward.getFlags();
 // sicherstellen, dass der verschachtelte Intent keine URI-Berechtigungen gewährt
 if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION == 0) &&
     (flags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION == 0)) {
   // verschachtelten Intent weiterleiten
   startActivity(forward);
 }

Sie können die Genehmigung von URI-Berechtigungen auch mithilfe von removeFlags entfernen. Beispiel:

 // Nicht vertrauenswürdiger Intent
 Intent Intent = getIntent();
 // URI-Berechtigungen des nicht vertrauenswürdigen Intents entfernen
 intent.removeFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
 intent.removeFlags(Intent FLAG_GRANT_WRITE_URI_PERMISSION);
 // nicht vertrauenswürdigen Intent weitergeben
 setResult(intent);

Benachrichtigungen auswerten und Option zur Vorbeugung wählen 

In der Benachrichtigung der Play Console wird angegeben, wo durch Ihre App mithilfe eines nicht vertrauenswürdigen Intents startActivity, startActivityForResult, startService, sendBroadcast oder setResult aufgerufen wird. Damit Sie die beste Option zur Vorbeugung ermitteln können, identifizieren Sie die Aufrufer von Methoden, um herauszufinden, woher der nicht vertrauenswürdige Intent stammt. Ermitteln Sie für Option 1 beispielsweise Aufrufer, um herauszufinden, welche Komponenten Sie als privat festlegen sollten.

Hilfe und Support

Technische Fragen zu dieser Sicherheitslücke können Sie bei Stack Overflow posten. Bitte verwenden Sie dabei das Tag „android-security“. Weitere Informationen zu den Maßnahmen, die zur Lösung dieses Problems erforderlich sind, erhalten Sie von unserem Entwicklersupportteam.

War das hilfreich?

Wie können wir die Seite verbessern?
false
Hauptmenü
1793358065357768543
true
Suchen in der Hilfe
true
true
true
true
true
5016068
false
false