Blog

Secure coding technique: Let's talk about Tapjacking

Pieter De Cremer
Published Oct 31, 2017

Tapjacking, a combination of "tap" and "hijacking", means just that. It is an attack where the attacker hijacks the users taps and tricks him into doing something he did not intend. So how does it work and how do we prevent it?

Well start our story with screen overlays. Screen overlays or as Google calls them, windows using the type TYPE_APPLICATION_OVERLAY. These are windows that are drawn on top of other apps and usually only obscure a part of the screen. These are often used (like the example image below) when an app requests new permissions.

Allow Application To Access Your Contact Popup

This is actually a cool and fun feature and more and more apps are starting to use it, think about Facebooks chat bubbles, or Google Maps navigation in a corner of your screen, like the screenshot below.

Secure Code Warrior Introduction Video

However, there are some security risks involved with these overlays. Any active screen overlay can listen for taps, how else would Facebook know that we tapped or dragged the bubble? This allows apps to spy on you and potentially steal passwords and credit card data.

One step further, and this is where the term tapjacking comes from, overlays can draw things on top of other apps tricking the user to perform different actions. The user thinks he is interacting with the overlay but in reality, his taps also perform actions in the underlying app. This way, the overlay can trick you into enabling certain permissions, or change some dangerous settings, as demonstrated in this old YouTube video.

The demonstration video above was uploaded to YouTube in 2010, so it was done on an older version of Android. But the attack is still relevant today, as vulnerabilities came to light that allows tapjacking in newer versions of Android such as Nougat and Marshmallow.

So what can you do about it? As a user, it is important to realize the consequences of these overlays and be aware of apps that use it. As of API level 23 (Android 6.0 Marshmallow), this has become a permission that has to be explicitly granted by the user. However, that leaves 50% of Androidusers still vulnerable. You can still check what apps make use of this permission in the settings under "Display over other apps".

As developers, it is up to us to make sure user actions are done with the full knowledge and consent of the user. Android provides a setting for your views that do just that, called filterTouchesWhenObscured. When it is enabled, the framework will discard touches that are received whenever the views window is obscured by another visible window. Its as simple as that, set filterTouchesWhenObscured to true, and your app is safe from tapjacking.

Good luck and see you next week!

Sometimes it is essential that an application be able to verify that an action is being performed with the full knowledge and consent of the user, such as granting a permission request, making a purchase or clicking on an advertisement. Unfortunately, a malicious application could try to spoof the user into performing these actions, unaware, by concealing the intended purpose of the view.

https://developer.android.com/reference/android/view/View.html

User with mobile phone in hand
User with mobile phone in hand
View Resource
View Resource

Sometimes it is essential that an application be able to verify that an action is being performed with the full knowledge and consent of the user

Interested in more?

Application Security Researcher - R&D Engineer - PhD Candidate

Secure Code Warrior is here for your organization to help you secure code across the entire software development lifecycle and create a culture in which cybersecurity is top of mind. Whether you’re an AppSec Manager, Developer, CISO, or anyone involved in security, we can help your organization reduce risks associated with insecure code.

Book a demo
Share on:
Author
Pieter De Cremer
Published Oct 31, 2017

Application Security Researcher - R&D Engineer - PhD Candidate

Share on:
User with mobile phone in hand
User with mobile phone in hand

Tapjacking, a combination of "tap" and "hijacking", means just that. It is an attack where the attacker hijacks the users taps and tricks him into doing something he did not intend. So how does it work and how do we prevent it?

Well start our story with screen overlays. Screen overlays or as Google calls them, windows using the type TYPE_APPLICATION_OVERLAY. These are windows that are drawn on top of other apps and usually only obscure a part of the screen. These are often used (like the example image below) when an app requests new permissions.

Allow Application To Access Your Contact Popup

This is actually a cool and fun feature and more and more apps are starting to use it, think about Facebooks chat bubbles, or Google Maps navigation in a corner of your screen, like the screenshot below.

Secure Code Warrior Introduction Video

However, there are some security risks involved with these overlays. Any active screen overlay can listen for taps, how else would Facebook know that we tapped or dragged the bubble? This allows apps to spy on you and potentially steal passwords and credit card data.

One step further, and this is where the term tapjacking comes from, overlays can draw things on top of other apps tricking the user to perform different actions. The user thinks he is interacting with the overlay but in reality, his taps also perform actions in the underlying app. This way, the overlay can trick you into enabling certain permissions, or change some dangerous settings, as demonstrated in this old YouTube video.

The demonstration video above was uploaded to YouTube in 2010, so it was done on an older version of Android. But the attack is still relevant today, as vulnerabilities came to light that allows tapjacking in newer versions of Android such as Nougat and Marshmallow.

So what can you do about it? As a user, it is important to realize the consequences of these overlays and be aware of apps that use it. As of API level 23 (Android 6.0 Marshmallow), this has become a permission that has to be explicitly granted by the user. However, that leaves 50% of Androidusers still vulnerable. You can still check what apps make use of this permission in the settings under "Display over other apps".

As developers, it is up to us to make sure user actions are done with the full knowledge and consent of the user. Android provides a setting for your views that do just that, called filterTouchesWhenObscured. When it is enabled, the framework will discard touches that are received whenever the views window is obscured by another visible window. Its as simple as that, set filterTouchesWhenObscured to true, and your app is safe from tapjacking.

Good luck and see you next week!

Sometimes it is essential that an application be able to verify that an action is being performed with the full knowledge and consent of the user, such as granting a permission request, making a purchase or clicking on an advertisement. Unfortunately, a malicious application could try to spoof the user into performing these actions, unaware, by concealing the intended purpose of the view.

https://developer.android.com/reference/android/view/View.html

View Resource
View Resource

Fill out the form below to download the report

We would like your permission to send you information on our products and/or related secure coding topics. We’ll always treat your personal details with the utmost care and will never sell them to other companies for marketing purposes.

Submit
To submit the form, please enable 'Analytics' cookies. Feel free to disable them again once you're done.
User with mobile phone in hand

Tapjacking, a combination of "tap" and "hijacking", means just that. It is an attack where the attacker hijacks the users taps and tricks him into doing something he did not intend. So how does it work and how do we prevent it?

Well start our story with screen overlays. Screen overlays or as Google calls them, windows using the type TYPE_APPLICATION_OVERLAY. These are windows that are drawn on top of other apps and usually only obscure a part of the screen. These are often used (like the example image below) when an app requests new permissions.

Allow Application To Access Your Contact Popup

This is actually a cool and fun feature and more and more apps are starting to use it, think about Facebooks chat bubbles, or Google Maps navigation in a corner of your screen, like the screenshot below.

Secure Code Warrior Introduction Video

However, there are some security risks involved with these overlays. Any active screen overlay can listen for taps, how else would Facebook know that we tapped or dragged the bubble? This allows apps to spy on you and potentially steal passwords and credit card data.

One step further, and this is where the term tapjacking comes from, overlays can draw things on top of other apps tricking the user to perform different actions. The user thinks he is interacting with the overlay but in reality, his taps also perform actions in the underlying app. This way, the overlay can trick you into enabling certain permissions, or change some dangerous settings, as demonstrated in this old YouTube video.

The demonstration video above was uploaded to YouTube in 2010, so it was done on an older version of Android. But the attack is still relevant today, as vulnerabilities came to light that allows tapjacking in newer versions of Android such as Nougat and Marshmallow.

So what can you do about it? As a user, it is important to realize the consequences of these overlays and be aware of apps that use it. As of API level 23 (Android 6.0 Marshmallow), this has become a permission that has to be explicitly granted by the user. However, that leaves 50% of Androidusers still vulnerable. You can still check what apps make use of this permission in the settings under "Display over other apps".

As developers, it is up to us to make sure user actions are done with the full knowledge and consent of the user. Android provides a setting for your views that do just that, called filterTouchesWhenObscured. When it is enabled, the framework will discard touches that are received whenever the views window is obscured by another visible window. Its as simple as that, set filterTouchesWhenObscured to true, and your app is safe from tapjacking.

Good luck and see you next week!

Sometimes it is essential that an application be able to verify that an action is being performed with the full knowledge and consent of the user, such as granting a permission request, making a purchase or clicking on an advertisement. Unfortunately, a malicious application could try to spoof the user into performing these actions, unaware, by concealing the intended purpose of the view.

https://developer.android.com/reference/android/view/View.html

Access resource

Click on the link below and download the PDF of this resource.

Secure Code Warrior is here for your organization to help you secure code across the entire software development lifecycle and create a culture in which cybersecurity is top of mind. Whether you’re an AppSec Manager, Developer, CISO, or anyone involved in security, we can help your organization reduce risks associated with insecure code.

View reportBook a demo
Download PDF
View Resource
Share on:
Interested in more?

Share on:
Author
Pieter De Cremer
Published Oct 31, 2017

Application Security Researcher - R&D Engineer - PhD Candidate

Share on:

Tapjacking, a combination of "tap" and "hijacking", means just that. It is an attack where the attacker hijacks the users taps and tricks him into doing something he did not intend. So how does it work and how do we prevent it?

Well start our story with screen overlays. Screen overlays or as Google calls them, windows using the type TYPE_APPLICATION_OVERLAY. These are windows that are drawn on top of other apps and usually only obscure a part of the screen. These are often used (like the example image below) when an app requests new permissions.

Allow Application To Access Your Contact Popup

This is actually a cool and fun feature and more and more apps are starting to use it, think about Facebooks chat bubbles, or Google Maps navigation in a corner of your screen, like the screenshot below.

Secure Code Warrior Introduction Video

However, there are some security risks involved with these overlays. Any active screen overlay can listen for taps, how else would Facebook know that we tapped or dragged the bubble? This allows apps to spy on you and potentially steal passwords and credit card data.

One step further, and this is where the term tapjacking comes from, overlays can draw things on top of other apps tricking the user to perform different actions. The user thinks he is interacting with the overlay but in reality, his taps also perform actions in the underlying app. This way, the overlay can trick you into enabling certain permissions, or change some dangerous settings, as demonstrated in this old YouTube video.

The demonstration video above was uploaded to YouTube in 2010, so it was done on an older version of Android. But the attack is still relevant today, as vulnerabilities came to light that allows tapjacking in newer versions of Android such as Nougat and Marshmallow.

So what can you do about it? As a user, it is important to realize the consequences of these overlays and be aware of apps that use it. As of API level 23 (Android 6.0 Marshmallow), this has become a permission that has to be explicitly granted by the user. However, that leaves 50% of Androidusers still vulnerable. You can still check what apps make use of this permission in the settings under "Display over other apps".

As developers, it is up to us to make sure user actions are done with the full knowledge and consent of the user. Android provides a setting for your views that do just that, called filterTouchesWhenObscured. When it is enabled, the framework will discard touches that are received whenever the views window is obscured by another visible window. Its as simple as that, set filterTouchesWhenObscured to true, and your app is safe from tapjacking.

Good luck and see you next week!

Sometimes it is essential that an application be able to verify that an action is being performed with the full knowledge and consent of the user, such as granting a permission request, making a purchase or clicking on an advertisement. Unfortunately, a malicious application could try to spoof the user into performing these actions, unaware, by concealing the intended purpose of the view.

https://developer.android.com/reference/android/view/View.html

Table of contents

Download PDF
View Resource
Interested in more?

Application Security Researcher - R&D Engineer - PhD Candidate

Secure Code Warrior is here for your organization to help you secure code across the entire software development lifecycle and create a culture in which cybersecurity is top of mind. Whether you’re an AppSec Manager, Developer, CISO, or anyone involved in security, we can help your organization reduce risks associated with insecure code.

Book a demoDownload
Share on:
Resource hub

Resources to get you started

More posts
Resource hub

Resources to get you started

More posts