OWASP-Kategorie: MASVS-PLATFORM: Plattforminteraktion
Übersicht
Die Sicherheitslücke beim Hijacking von implicit intent tritt auf, wenn eine Anwendung beim Aufrufen eines Intents keinen voll qualifizierten Namen oder ein voll qualifiziertes Paket für die Komponentenklasse angibt. So kann eine schädliche Anwendung einen Intent-Filter registrieren, um den Intent anstelle der beabsichtigten Anwendung abzufangen.
Je nach Intent-Inhalt können Angreifer vertrauliche Informationen lesen oder ändern oder mit veränderbaren Objekten wie veränderbaren PendingIntents oder Bindern interagieren.
Durch das Hijacking einer impliziten Absicht kann ein Angreifer auch beliebige Aktionen ausführen, z. B. vom Angreifer kontrollierte Komponenten starten.
Positiv beeinflussen
Wenn ein impliziter Intent, der vertrauliche Daten verarbeitet, ein Sitzungstoken in einem zusätzlichen URL-String übergibt, um eine WebView zu öffnen, kann jede Anwendung, die die richtigen Intent-Filter angibt, dieses Token lesen. So kann jede richtig konfigurierte Anwendung auf dem Gerät die Intent-Nachricht abfangen und die darin enthaltenen vertraulichen Daten lesen. Angreifer können dann Daten wie personenidentifizierbare Informationen oder Sitzungstokens abfangen.
Abhilfemaßnahmen
Machen Sie Intents explizit, indem Sie setPackage()
aufrufen, es sei denn, dies ist für die Anwendung erforderlich. So kann die Intent-Anfrage nur von einer bestimmten Komponente (entweder innerhalb der App oder von anderen Apps) interpretiert werden, was verhindert, dass nicht vertrauenswürdige Apps die mit der Intent-Anfrage 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änderbaren Objekte aus, die nicht freigegeben werden sollen. Implizite Intents müssen möglicherweise verwendet werden, wenn eine App nicht genau weiß, welche App die Aktion ausführen soll (z. B. eine E-Mail schreiben oder ein Foto aufnehmen).
Ressourcen
- Manifest-Intent-Filterelement
- Whitelist für privilegierte Berechtigungen
- Intents und Intent-Filter
- Auswahl für implizite Intents erzwingen
- Häufige implizite Intents