android:exported

Categoria do OWASP: MASVS-PLATFORM - Interação com plataformas

Visão geral

O atributo android:exported define se um componente (atividade, serviço, broadcast receiver etc.) pode ser iniciado por componentes de outros aplicativos:

  • Se ele for definido como true, qualquer app poderá acessar a atividade e iniciá-la pelo nome exato da classe.
  • Se ele for definido como false, a atividade só poderá ser iniciada por componentes do mesmo aplicativo ou com o mesmo ID do usuário ou componentes de sistema privilegiados.

A lógica por trás do valor padrão desse atributo mudou com tempo, variando de acordo com os tipos de componente e as versões do Android. Por exemplo, no nível 16 da API (Android 4.1.1) e anteriores, o valor de elementos <provider> é definido como true por padrão. Não definir esse atributo aumenta explicitamente o risco de ter valores padrão diferentes entre alguns dispositivos.

Impacto

A situação com valores padrão diferentes significa que os componentes internos do aplicativo podem ser expostos acidentalmente. Confira alguns exemplos de consequências:

Ataques de negação de serviço. Outros apps que acessam componentes internos de forma inadequada para modificar a funcionalidade interna do app. Vazamento de dados sensíveis. Execução de código no contexto do aplicativo vulnerável.

Mitigações

Sempre defina o atributo android:exported explicitamente. Isso não deixa espaço para interpretações e indica sua intenção quanto à visibilidade de um componente.