Impliziter Intent-Hijacking

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 änderbaren Objekten wie änderbaren PendingIntents oder Binders interagieren.

Das Diebstahl eines impliziten Intents kann einem Angreifer auch die Möglichkeit geben, willkürliche Aktionen auszuführen, z. B. von ihm kontrollierte Komponenten zu starten.

Positiv beeinflussen

Wenn ein impliziter Intent, der sensible Daten verarbeitet, ein Sitzungstoken in einem zusätzlichen URL-String übergibt, um eine WebView zu öffnen, kann jede Anwendung, die die entsprechenden 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ß, mit welcher App die Aktion ausgeführt wird (z. B. beim Schreiben einer E-Mail oder Fotografieren).

Ressourcen