MASTG-KNOW-0025: Implicit Intents

Um Intent é um objeto de mensagem que você pode usar para solicitar uma ação de outro componente de aplicativo. Embora os intents facilitem a comunicação entre componentes de várias formas, existem três casos de uso básicos: iniciar uma activity, iniciar um service e entregar um broadcast.

De acordo com a Documentação para Desenvolvedores Android, o Android fornece dois tipos de intents:

  • Explicit intents especificam qual aplicativo satisfará o intent ao fornecer o nome do pacote do aplicativo alvo ou um nome de componente totalmente qualificado. Normalmente, você usará um explicit intent para iniciar um componente em seu próprio aplicativo, pois você conhece o nome da classe da activity ou service que deseja iniciar. Por exemplo, você pode querer iniciar uma nova activity em seu aplicativo em resposta a uma ação do usuário, ou iniciar um service para baixar um arquivo em segundo plano.
// Observe a especificação de um componente concreto (DownloadActivity) que é iniciado pelo intent.
Intent downloadIntent = new Intent(this, DownloadActivity.class);
downloadIntent.setAction("android.intent.action.GET_CONTENT")
startActivityForResult(downloadIntent);
  • Implicit intents não nomeiam um componente específico, mas declaram uma ação geral a ser executada que pode ser tratada pelo componente de outro aplicativo. Por exemplo, se você quiser mostrar ao usuário uma localização em um mapa, pode usar um implicit intent para solicitar que outro aplicativo capaz mostre uma localização específica no mapa. Outro exemplo é quando o usuário clica em um endereço de email dentro de um aplicativo, onde o aplicativo chamador não quer especificar um aplicativo de email específico e deixa essa escolha a cargo do usuário.
// Desenvolvedores também podem iniciar uma activity apenas configurando uma ação que é correspondida pelo aplicativo pretendido.
Intent downloadIntent = new Intent();
downloadIntent.setAction("android.intent.action.GET_CONTENT")
startActivityForResult(downloadIntent);

O uso de implicit intents pode levar a múltiplos riscos de segurança, por exemplo, se o aplicativo chamador processar o valor de retorno do implicit intent sem a verificação adequada ou se o intent contiver dados sensíveis, eles podem ser vazados acidentalmente para terceiros não autorizados.

Você pode consultar esta postagem de blog, este artigo e CWE-927 para mais informações sobre o problema mencionado, cenários de ataque concretos e recomendações.