Piratería de intent implícito

Categoría de OWASP: MASVS-PLATFORM: Interacción con la plataforma

Descripción general

La piratería de intent implícito se produce cuando una aplicación no especifica un paquete o nombre de clase del componente completamente calificado cuando invoca un intent. Esto permite que una aplicación maliciosa registre un filtro de intents para interceptar al intent en lugar de la aplicación prevista.

Según el contenido del intent, los atacantes pueden leer información sensible o interactuar con objetos mutables, como Binders o PendingIntents mutables.

Impacto

La piratería de un intent implícito permite que un atacante lea o modifique el contenido del intent, como también que lo intercepte para realizar una acción. Esto podría tener consecuencias, como la filtración de información o de datos sensibles, o bien el lanzamiento de componentes controlados por atacantes.

Mitigaciones

Llama a setPackage() para hacer que los intents sean explícitos, como se muestra en el siguiente fragmento de código:

Kotlin

val intent = Intent("android.intent.action.CREATE_DOCUMENT").apply {
    addCategory("android.intent.category.OPENABLE")
    setPackage("com.some.packagename")
    setType("*/*")
    putExtra("android.intent.extra.LOCAL_ONLY", true)
    putExtra("android.intent.extra.TITLE", "Some Title")
}

startActivity(intent)

Java

Intent intent = new Intent("android.intent.action.CREATE_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");

intent.setPackage("com.some.packagename");

intent.setType("*/*");
intent.putExtra("android.intent.extra.LOCAL_ONLY", true);
intent.putExtra("android.intent.extra.TITLE", "Some Title");
startActivity(intent);

Si necesitas usar intents implícitos, omite cualquier información sensible, o bien objeto mutable que no quieras exponer. Es posible que se deban usar intents implícitos si una app no tiene conocimientos exactos sobre qué app resolverá la acción (p. ej., redactar un correo electrónico, tomar una foto, etcétera).

Recursos