Tapjacking Vulnerability
Vulnérabilité de Tapjacking
Description
La vulnérabilité de Tapjacking est une faille de sécurité qui permet à un attaquant de superposer du contenu ou des interfaces malveillantes au-dessus des applications légitimes, incitant les utilisateurs à interagir avec le contenu de l'attaquant à la place. Cela peut conduire à diverses activités malveillantes, telles que le vol d'informations sensibles, la capture d'informations d'identification (identifiants) ou la réalisation d'actions non autorisées au nom de l'utilisateur.
Voici des exemples de gestion incorrecte des superpositions :
<Button
android:id="@+id/buttonLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="LOGIN"
app:layout_constraintBottom_toTopOf="@id/textViewRegister"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/textInputPasswordL"
android:filterTouchesWhenObscured="false"/> // vulnerable
public class YourActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your_layout);
Button yourButton = findViewById(R.id.yourButtonId);
yourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Handle button click
}
});
}
}
class YourActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_your_layout)
val yourButton: Button = findViewById(R.id.yourButtonId)
yourButton.setOnClickListener {
// Handle button click
}
}
}
Recommandation
Pour atténuer les vulnérabilités de Tapjacking dans les applications mobiles, tenez compte des recommandations suivantes :
- Activer le filtrage des interactions tactiles (Touch Filtering) : Définissez l'attribut
android:filterTouchesWhenObscuredsurtruepour les éléments de l'interface utilisateur (UI), tels que les boutons impliqués dans les processus d'authentification. Cela empêche les événements tactiles d'être transmis aux vues masquées, réduisant ainsi le risque d'attaques de Tapjacking.
Remarque : Android S (12, SDK 31) et les versions ultérieures empêchent les attaques de tapjacking par défaut, en bloquant les événements tactiles provenant de superpositions non approuvées à partir d'un autre UID.
Voici des exemples de gestion sécurisée des superpositions :
<Button
android:id="@+id/buttonLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="LOGIN"
app:layout_constraintBottom_toTopOf="@id/textViewRegister"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/textInputPasswordL"
android:filterTouchesWhenObscured="true"/>
public class YourActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your_layout);
Button yourButton = findViewById(R.id.yourButtonId);
yourButton.filterTouchesWhenObscured = true
yourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Handle button click
}
});
}
}
class YourActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_your_layout)
val yourButton: Button = findViewById(R.id.yourButtonId)
yourButton.isFilterTouchesWhenObscured = true
yourButton.setOnClickListener {
// Handle button click
}
}
}
Liens
Normes
- OWASP_MASVS_L1:
- MSTG_PLATFORM_2
- OWASP_MASVS_L2:
- MSTG_PLATFORM_2
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- OWASP_MASVS_v2_1:
- MASVS_CODE_4
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213