# Tapjacking

### Description <a href="#overview" id="overview"></a>

Le tapjacking est l'équivalent du [clickjacking](https://blog.s1rn3tz.ovh/pentest-web/clickjacking) dans une application Android. Une application malveillante amène l'utilisateur à cliquer sur un contrôle de sécurité (bouton de confirmation permettant de désactiver un élément de sécurité par exemple) en utilisant une superposition, par exemple, pour masquer l'UI. Sur cette page, nous différencions deux variantes d'attaque : l'occlusion complète et l'occlusion partielle. En cas d'occlusion complète, le pirate masque la zone tactile, tandis que dans le cas d'une occlusion partielle, la zone tactile n'est pas masquée.

## Occlusion complète

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2F3cWASlUdyLU4nBDqqMqF%2Fimage.png?alt=media&#x26;token=1317ecba-444f-4749-8adc-fd7b36fad9b2" alt=""><figcaption><p>Exemple de page de dont l'icône de fermeture est situé sur un bouton sensible </p></figcaption></figure>

## Occlusion partielle

### Sandwich d'activité

Si une activité sensible est exportée, il est possible d'importer l'activté dans une application malveillante qui se charge tout simplement de modifier l'UI de manière modifier l'utilisation légitime de l'activité originale.

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2Fna0wAF9ifcvIgCbVtGB6%2Fimage.png?alt=media&#x26;token=98c2b617-9755-49ec-844b-2fde003c6600" alt=""><figcaption><p>Exemple de remplacement du message de l'application originale par un autre message</p></figcaption></figure>

## Exploitation par version de SDK utilisé

### Android < 6 (API 23) : android.Manifest.permission.SYSTEM\_ALERT\_WINDOW

L'autorisation [`SYSTEM_ALERT_WINDOW`](https://developer.android.com/reference/android/Manifest.permission?hl=fr#SYSTEM_ALERT_WINDOW) permet à une application de créer une fenêtre superposée pour toutes les applications.

### Android < 11 (API 30): toast personnalisé

Il est possible d'utiliser `Toast.setView()` pour personnaliser l'apparence d'un message de type [toast](https://developer.android.com/guide/topics/ui/notifiers/toasts?hl=fr). Sur Android 10 (niveau d'API 29) et versions antérieures, des applications malveillantes peuvent lancer de tels toasts en arrière-plan.

{% hint style="info" %}
Il est possible d'éviter cette limitation dans certains cas à l'aide d'un *toast burst*, dans lequel il est possible de mettre plusieurs toasts en attente au premier plan, qui continuent de se lancer même une fois que l'application passe en arrière-plan.
{% endhint %}

{% hint style="warning" %}
Les attaques de toasts en arrière-plan et les toast bursts sont entièrement atténuées depuis Android 12 (niveau d'API 31).
{% endhint %}

## Outils

### Tapjacker

Tapjacker est une application design pour PoC des vulnerabilités de tapjacking.

ressource: <https://github.com/dzmitry-savitski/tapjacker>
