Saltar a contenido

Intent Redirection

Redirección de Intent

Descripción

Una vulnerabilidad de redirección de Intent de Android ocurre cuando una aplicación envía un Intent (un objeto de mensajería utilizado para solicitar una acción de otro componente de la aplicación) a otro componente, pero un atacante manipula el Intent para redirigirlo a una aplicación o actividad maliciosa. Esto puede llevar a un acceso no autorizado a los componentes de la aplicación.

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);
        }
    }
}

Recomendación

Como regla general, es mejor evitar exponer funcionalidades relacionadas con la redirección de intents anidados. Sin embargo, si la situación lo exige, utilice las siguientes estrategias para la mitigación:

  • Compruebe hacia dónde se redirige el intent.
  • Utilice objetos PendingIntent. Esto evita que su componente sea exportado y hace que el intent de la acción de destino sea inmutable.
  • Utilice IntentSanitizer para hacer una copia saneada de 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);
        }
    }
}

Enlaces

Estándares

  • 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