Categoria do OWASP: MASVS-PLATFORM - Interação com plataformas
Visão geral
Os riscos de segurança associados aos links diretos derivam da principal capacidade de permitir navegação e interação contínuas em aplicativos para dispositivos móveis. As vulnerabilidades de links diretos surgem de fraquezas na implementação ou no processamento de links diretos. Essas falhas podem ser exploradas por agentes maliciosos para ter acesso a funções ou dados privilegiados, o que pode resultar em violações de dados, violações de privacidade e ações não autorizadas. Os invasores podem explorar essas vulnerabilidades usando várias técnicas, como ataques de sequestro de links diretos e de validação de dados.
Impacto
A falta de um mecanismo de validação de link direto adequado ou o uso não seguro de links diretos pode ajudar usuários mal-intencionados a realizar ataques, como bypass de validação de host, scripting entre apps e execução remota de código no contexto de permissões do aplicativo vulnerável. Dependendo da natureza do aplicativo, isso pode resultar em acesso não autorizado a dados ou funções sensíveis.
Mitigações
Impedir o sequestro de links diretos
Por design, o Android permite que vários apps registrem filtros de intent para o mesmo
URI de link direto. Para evitar que apps maliciosos interceptem links diretos destinados
ao seu app, implemente o atributo android:autoVerify
em intent-filter
no AndroidManifest
do aplicativo. Isso permite que os usuários selecionem o
app que preferirem para processar links diretos, garantindo a operação pretendida e
impedindo que aplicativos maliciosos os interpretem automaticamente.
O Android 12 introduziu um processamento mais rigoroso de intents da Web para melhorar a segurança. Agora, os apps precisam ser verificados para processar links de domínios específicos, seja por Links do app Android ou pela seleção do usuário nas configurações do sistema. Isso impede que os apps sequestrem links que não podem processar.
Para ativar a verificação de processamento de links no seu app, adicione filtros de intent que correspondam ao formato abaixo. Esse exemplo foi retirado da documentação Verify Android App Links:
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Implementar uma validação de dados robusta
Os links diretos podem incluir outros parâmetros que são enviados para a intent de destino, por exemplo, para realizar outras ações. O processamento seguro de links profundos é baseado na validação rigorosa de dados. Todos os dados recebidos de links diretos precisam ser validados e limpos meticulosamente pelos desenvolvedores para evitar que códigos ou valores maliciosos sejam injetados no aplicativo legítimo. Isso pode ser implementado verificando o valor de qualquer parâmetro de link direto em relação a uma lista de permissões predefinida de valores esperados.
Os apps precisam verificar outros estados internos relevantes, como o estado de autenticação ou autorização, antes de expor informações sensíveis. Um exemplo pode ser uma recompensa por concluir um nível de um jogo. Nesse caso, vale a pena validar a pré-condição de ter concluído o nível e redirecionar para a tela principal se não for o caso.
Recursos
- Verificar os Links do app Android
- Processar links do app Android
- Resolução de intent da Web
- Magic link de interceptação de invasão de contas para o app Arrive
- Deep Links e exploração de WebViews, parte I
- Deep Links e exploração de WebViews, parte II
- Sugestão recente de um problema de link direto na Navegação do Jetpack