Aller au contenu

Intent Redirection

Redirection d'Intent

Description

Une vulnérabilité de redirection d'Intent Android se produit lorsqu'une application envoie un Intent (un objet de messagerie utilisé pour demander une action à un autre composant d'application) à un autre composant, mais qu'un attaquant manipule l'Intent pour le rediriger vers une application ou une activité malveillante. Cela peut conduire à un accès non autorisé aux composants de l'application.

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class YourActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Get the Intent from the previous activity
        Intent intent = getIntent();
        Intent forward = intent.getParcelableExtra("key");

        if (forward != null) {
            startActivity(forward);
        }
    }
}

Recommandation

En règle générale, il est préférable d'éviter d'exposer des fonctionnalités liées à la redirection d'Intents imbriqués. Cependant, si la situation l'exige, utilisez les stratégies suivantes pour l'atténuation :

  • Vérifiez où l'Intent est redirigé.
  • Utilisez des objets PendingIntent. Cela empêche votre composant d'être exporté et rend l'Intent de l'action cible immuable.
  • Utilisez IntentSanitizer pour créer une copie assainie d'un Intent
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class YourActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Get the Intent from the previous activity
        Intent intent = getIntent();
        Intent forward = intent.getParcelableExtra("key");
        ComponentName name = forward.resolveActivity(getPackageManager());
        if (name.getPackageName().equals("safe_package") && name.getClassName().equals("safe_class")) {
            startActivity(forward);
        }
    }
}

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
    • REQ_11_3
  • HIPAA_CONTROLS:
    • SECURITY221
    • SECURITY212
    • SECURITY213
  • 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