diff --git a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md index ab55abc6d..f2e4b4466 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -10,44 +10,94 @@ Aqui está um resumo rápido das transições de atividades: - **Atividade 1** começa como a única atividade em primeiro plano. - Lançar **Atividade 2** empurra **Atividade 1** para a pilha de atividades, trazendo **Atividade 2** para o primeiro plano. -- Iniciar **Atividade 3** move **Atividade 1** e **Atividade 2** mais para trás na pilha, com **Atividade 3** agora à frente. +- Iniciar **Atividade 3** move **Atividade 1** e **Atividade 2** mais para trás na pilha, com **Atividade 3** agora na frente. - Fechar **Atividade 3** traz **Atividade 2** de volta ao primeiro plano, demonstrando o mecanismo de navegação de tarefas simplificado do Android. ![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>) -## Ataque de Afinidade de Tarefa +--- -### Visão Geral da Afinidade de Tarefa e Modos de Lançamento +## Ataques de afinidade de tarefa -Em aplicativos Android, a **afinidade de tarefa** especifica a tarefa preferida de uma atividade, geralmente alinhando-se com o nome do pacote do aplicativo. Esta configuração é instrumental na criação de um aplicativo de prova de conceito (PoC) para demonstrar o ataque. +`taskAffinity` informa ao Android a qual tarefa uma `Activity` *prefere* pertencer. Quando duas atividades compartilham a mesma afinidade, **o Android pode mesclá-las dentro da mesma pilha de atividades, mesmo que venham de diferentes APKs**. -### Modos de Lançamento +Se um atacante conseguir colocar uma atividade maliciosa na **raiz** dessa pilha, toda vez que a vítima abrir o aplicativo legítimo, a interface maliciosa será a primeira coisa que o usuário verá – perfeito para phishing ou solicitações de permissões abusivas. -O atributo `launchMode` direciona o manuseio das instâncias de atividade dentro das tarefas. O modo **singleTask** é fundamental para este ataque, ditando três cenários com base nas instâncias de atividade existentes e nas correspondências de afinidade de tarefa. A exploração depende da capacidade do aplicativo do atacante de imitar a afinidade de tarefa do aplicativo alvo, enganando o sistema Android para lançar o aplicativo do atacante em vez do alvo pretendido. +A superfície de ataque é mais ampla do que muitos desenvolvedores pensam, porque **cada atividade herda automaticamente uma afinidade igual ao nome do pacote do aplicativo** (a menos que o desenvolvedor defina `android:taskAffinity=""`). Portanto, *não fazer nada* já deixa o aplicativo vulnerável a sequestro de tarefas em versões do Android anteriores à 11. -### Etapas Detalhadas do Ataque +### Cenário clássico "singleTask / StrandHogg" -1. **Instalação do Aplicativo Malicioso**: A vítima instala o aplicativo do atacante em seu dispositivo. -2. **Ativação Inicial**: A vítima abre primeiro o aplicativo malicioso, preparando o dispositivo para o ataque. -3. **Tentativa de Lançamento do Aplicativo Alvo**: A vítima tenta abrir o aplicativo alvo. -4. **Execução do Sequestro**: Em algum momento, o aplicativo tenta abrir a visualização **singleTask**. Devido à afinidade de tarefa correspondente, o aplicativo malicioso é lançado no lugar do aplicativo alvo. -5. **Engano**: O aplicativo malicioso apresenta uma tela de login falsa semelhante ao aplicativo alvo, enganando o usuário para inserir informações sensíveis. +1. O atacante declara uma atividade com: +```xml + + + + + + +``` +2. O aplicativo malicioso é iniciado uma vez para que a tarefa (com a afinidade falsificada) exista nas tarefas recentes. +3. Quando o usuário abre o aplicativo real mais tarde, o Android encontra que já existe uma tarefa cuja **afinidade raiz corresponde ao pacote** e simplesmente traz essa tarefa para o primeiro plano. +4. A interface do atacante é exibida primeiro. -> [!TIP] -> Observe que, para que este ataque funcione, a visualização vulnerável **não precisa ter exportado para true** nem precisa ser a atividade principal. +### Variante Default–Affinity (sem `singleTask`) – Estudo de caso de Caller ID -Para uma implementação prática deste ataque, consulte o repositório Task Hijacking Strandhogg no GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg). +A vulnerabilidade relatada no aplicativo **Caller ID (caller.id.phone.number.block)** mostra que o ataque *também* funciona contra o modo de lançamento `standard` padrão: -### Medidas de Prevenção +1. O aplicativo atacante cria uma atividade raiz falsa e imediatamente se oculta: +```kotlin +class HackActivity : AppCompatActivity() { +override fun onCreate(savedInstanceState: Bundle?) { +super.onCreate(savedInstanceState) +moveTaskToBack(true) // mantém a tarefa nas recentes, mas fora de vista +} +} +``` +2. O manifesto só precisa copiar o pacote da vítima em `taskAffinity`: +```xml + + + + + + +``` +3. Assim que o usuário instala e abre o aplicativo malicioso **uma vez**, uma tarefa cuja afinidade é igual ao pacote da vítima existe (mas fica em segundo plano). +4. Quando o aplicativo real de Caller ID é lançado, o Android reutiliza essa tarefa e traz `HackActivity` para o primeiro plano → janela de phishing/abuso de permissões. -Para prevenir tais ataques, os desenvolvedores podem: -- Definir **`**taskAffinity`** da visualização **singleTask** como uma string vazia (`android:taskAffinity=""`) -- Optar pelo modo de lançamento **`singleInstance`**, garantindo o isolamento de seu aplicativo em relação a outros. -- Personalizar a função **`onBackPressed()`** oferece proteção adicional contra sequestro de tarefas. +> NOTA: A partir do **Android 11 (API 30)**, o sistema *não* coloca dois pacotes que não fazem parte do mesmo UID na mesma tarefa por padrão, mitigando essa variante específica. Versões mais antigas permanecem vulneráveis. -## **Referências** +--- -- [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/) -- [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html) +## Lista de verificação de Detecção & Exploração + +1. Extraia `AndroidManifest.xml` do APK alvo e verifique se cada `` (ou o elemento global ``) contém `android:taskAffinity=""` (vazio) **ou** um valor personalizado. +2. Se não, crie um aplicativo malicioso: +- `android:taskAffinity` = nome do pacote da vítima. +- Forneça um intento `MAIN/LAUNCHER` para que o usuário possa abri-lo uma vez. +- Opcionalmente, chame `moveTaskToBack(true)` para ocultar imediatamente. +3. Deixe a vítima abrir seu aplicativo legítimo → sequestro. + +## Mitigação + +Os desenvolvedores devem: + +* Definir explicitamente `android:taskAffinity=""` no nível `` (recomendado) **ou** dar a cada atividade uma afinidade única e privada. +* Para telas altamente sensíveis, combine o acima com `android:launchMode="singleInstance"` ou proteções modernas [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode). +* Atualizar a `targetSdkVersion` do aplicativo e impor mudanças comportamentais do **Android 11** onde as tarefas não são compartilhadas entre pacotes por padrão. + +--- + +## Referências + +- [https://blog.dixitaditya.com/android-task-hijacking/](https://blog.dixitaditya.com/android-task-hijacking/) +- [https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html) +- [Android Manifest Misconfiguration Leading to Task Hijacking in Caller ID app](https://github.com/KMov-g/androidapps/blob/main/caller.id.phone.number.block.md) +- [https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06](https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06) {{#include ../../banners/hacktricks-training.md}}