Aller au contenu

Task Hijacking

Détournement de tâche

Description

Une tâche Android est un ensemble d'activités avec lesquelles les utilisateurs interagissent lorsqu'ils effectuent une certaine action. Les activités de différentes applications peuvent résider dans la même tâche, ce qui peut être utilisé pour relocaliser une activité malveillante dans la tâche de votre application en manipulant les paramètres suivants :

  • Task Affinity contrôlé par l'attribut taskAffinity
  • Task Reparenting contrôlé par l'attribut allowTaskReparenting

La Task Affinity est un attribut d'activité défini dans la balise <activity> du fichier AndroidManifest.xml. La Task Affinity spécifie à quelle tâche l'activité souhaite se joindre. Par défaut, toutes les activités d'une application ont la même affinité, qui correspond au nom du package de l'application.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="co.secureApp.app">
    <application>
        <activity android:name=".ActivityA"></activity>
        <activity android:name=".ActivityB" android:taskAffinity="co.ostorlab.Myapp:taskB"></activity>
    </application>
</manifest>

Lorsque allowTaskReparenting est défini sur true pour une activité A, et qu'une nouvelle tâche avec la même affinité est mise au premier plan, le système déplace l'activité relocalisable A de sa tâche d'hébergement d'origine vers la nouvelle pile de tâches au premier plan.

Les attaques par détournement de tâche se présentent sous différentes formes :

  • Contrôle de l'affinité de tâche (Task Affinity Control) : l'application possède le nom de package com.mySecureApp.app et l'activité A1. Une application malveillante possède deux activités M1 et M2M2.taskAffinity = com.mySecureApp.app et M2.allowTaskReparenting = true. Si l'application malveillante est ouverte sur M2, une fois que vous démarrez votre application, M2 est ramenée au premier plan et l'utilisateur interagira avec l'application malveillante.

  • Mode Single Task : l'application a défini son mode de lancement sur singleTask. Une application malveillante avec M2.taskAffinity = com.mySecureApp.app peut détourner la pile de tâches de l'application cible.

  • Task Reparenting : l'application a défini taskReparenting sur true. Une application malveillante peut déplacer la tâche de l'application cible vers la pile de l'application malveillante.

Le détournement de tâche peut être utilisé pour effectuer du hameçonnage (phishing), des attaques par déni d'utilisation, et a été exploité par le passé par des chevaux de Troie bancaires. Les nouvelles variantes d'attaques (StrandHogg 2.0) sont extrêmement difficiles à détecter, car ce sont des attaques basées sur le code.

Le détournement de tâche a été corrigé dans Android version 11 dans le cadre de la correction de CVE-2020-0267 WindowManager confused deputy.

Recommandation

Les différentes formes de vulnérabilités de détournement de tâche nécessitent des correctifs différents :

  • Définissez l'affinité de tâche des activités de l'application sur "" (chaîne vide) dans la balise <activity> du AndroidManifest.xml pour forcer les activités à utiliser une affinité de tâche générée aléatoirement, ou définissez-la au niveau de la balise <application> pour l'appliquer à toutes les activités de l'application.

OU

  • Définissez le android:launchMode sur singleInstance. singleInstance garantit qu'aucune autre activité ne sera créée dans la même tâche.

  • Ne spécifiez pas de mode de lancement défini sur singleTask ou ajoutez la prise en charge d'un service de surveillance pour détecter la présence de tâches malveillantes au premier plan.

  • Ne définissez pas l'indicateur FLAG_ACTIVITY_NEW_TASK dans les intentions (intents) de lancement d'activité, ou utilisez-le avec FLAG_ACTIVITY_CLEAR_TASK :

Intent i = new Intent(this, AnActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
  • Ne spécifiez pas allowReparenting avec taskAffinity ou ajoutez la prise en charge d'un service de surveillance pour détecter la présence de tâches malveillantes au premier plan.

  • Privilégiez l'utilisation d'une intention (intent) explicite, qui spécifie quelle application satisfera l'intention, en fournissant le nom de package de l'application cible ou un nom de classe de composant pleinement qualifié. L'intention implicite spécifie uniquement l'action générale.

Liens

Normes

  • OWASP_MASVS_L2:
    • MSTG_PLATFORM_9
  • GDPR:
    • ART_5
    • ART_25
    • ART_32
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
    • REQ_6_3
    • REQ_11_3
  • HIPAA_CONTROLS:
    • SECURITY221
    • SECURITY212
    • SECURITY213
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_4_1
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5