OWASP-Kategorie:MASVS-PLATFORM: Platform Interaction
Übersicht
Die Sicherheitslücke durch implizite Intents tritt auf, wenn eine Anwendung beim Aufrufen eines Intents keinen voll qualifizierten Namen der Komponentenklasse oder kein Paket angibt. So kann eine schädliche Anwendung einen Intent-Filter registrieren, um den Intent anstelle der vorgesehenen Anwendung abzufangen.
Abhängig vom Intent-Inhalt könnten Angreifer vertrauliche Informationen lesen oder ändern oder mit veränderlichen Objekten wie mutable PendingIntents oder Binders interagieren.
Durch das Abfangen einer impliziten Intention kann ein Angreifer auch beliebige Aktionen ausführen, z. B. das Starten von vom Angreifer kontrollierten Komponenten.
Auswirkungen
Wenn bei der Verarbeitung eines impliziten Intents mit vertraulichen Daten ein Sitzungstoken in einem zusätzlichen URL-String übergeben wird, um eine WebView zu öffnen, kann jede Anwendung, die die entsprechenden Intent-Filter angibt, dieses Token lesen. Dadurch kann jede richtig konfigurierte Anwendung auf dem Gerät die Intention abfangen und die darin enthaltenen vertraulichen Daten lesen. Angreifer können so Daten wie personenidentifizierbare Informationen oder Sitzungstokens exfiltrieren.
Gegenmaßnahmen
Sofern die Anwendung dies nicht erfordert, sollten Sie Intentionen explizit machen, indem Sie setPackage() aufrufen. Dadurch kann die Absicht nur von einer bestimmten Komponente (entweder in der App oder von anderen Anwendungen) interpretiert werden. So wird verhindert, dass nicht vertrauenswürdige Anwendungen die mit der Absicht gesendeten Daten abfangen. Das folgende Snippet zeigt, wie ein Intent explizit gemacht wird:
Kotlin
val intent = Intent("android.intent.action.CREATE_DOCUMENT").apply {
addCategory("android.intent.category.OPENABLE")
setPackage("com.some.packagename")
setType("*/*")
putExtra("android.intent.extra.LOCAL_ONLY", true)
putExtra("android.intent.extra.TITLE", "Some Title")
}
startActivity(intent)
Java
Intent intent = new Intent("android.intent.action.CREATE_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");
intent.setPackage("com.some.packagename");
intent.setType("*/*");
intent.putExtra("android.intent.extra.LOCAL_ONLY", true);
intent.putExtra("android.intent.extra.TITLE", "Some Title");
startActivity(intent);
Wenn Sie implizite Intents verwenden müssen, lassen Sie alle vertraulichen Informationen oder veränderlichen Objekte weg, die Sie nicht preisgeben möchten. Implizite Intents müssen möglicherweise verwendet werden, wenn eine App nicht genau weiß, welche App die Aktion ausführen wird (z.B. eine E-Mail verfassen, ein Bild aufnehmen usw.).
Ressourcen
- Manifest-Element „intent-filter“
- Zulassungsliste für Berechtigungen mit erhöhten Rechten
- Intents und Intent-Filter
- Auswahl erzwingen für implizite Intents
- Häufige implizite Intents