Estas informações destinam-se aos programadores com apps que contêm a vulnerabilidade de PendingIntent implícito.
O que está a acontecer
Uma ou mais das suas apps contêm um problema de PendingIntent implícito que pode causar ameaças de segurança sob a forma de negação de serviço, roubo de dados privados e escalamento de privilégios. Reveja os passos detalhados abaixo para corrigir o problema com as suas apps. Pode encontrar as localizações das utilizações de PendingIntent implícito na sua app na notificação da Play Console relativa à app. Se uma localização terminar com "(no código carregado dinamicamente)", a localização está no código carregado dinamicamente pela app ou por bibliotecas usadas pela app. Geralmente, as aplicações usam código carregado dinamicamente através do fornecimento de funcionalidades a pedido, embora existam outras técnicas não recomendadas (algumas técnicas não recomendadas também violam a Política do Google Play e não devem ser usadas). Além disso, os empacotadores podem transformar o código da aplicação em código carregado dinamicamente.
Recomendamos que corrija este problema, mas não é obrigatório. O estado da publicação da sua app não será afetado pela presença deste problema.
Detalhes adicionais
As apps Android enviam mensagens entre componentes através de intents. Os intents podem especificar o componente de destino (intent explícito) ou indicar uma ação geral e deixar que o sistema operativo envie o intent para qualquer componente no dispositivo que registe um filtro de intent que corresponda a essa ação (intent implícito).
Os PendingIntents são intents delegados a outra app para serem enviados numa data futura. A criação de uma intenção implícita unida num PendingIntent é uma vulnerabilidade de segurança que pode levar a negação de serviço, roubo de dados privados e escalamento de privilégios.
Passos seguintes
1. Atualize a sua app e corrija os alertas de "PendingIntent implícita" ao seguir os passos realçados abaixo.
Reveja a sua app para ver a localização em que é criado um PendingIntent. Por exemplo, o código seguinte cria um PendingIntent que une uma intenção implícita:
// Crie um intent de base implícita e una-o num PendingIntent
Intent base = new Intent("ACTION_FOO");
base.setPackage("some_package");
PendingIntent pi = PendingIntent.getService(this, 0, base, 0);
A Google recomenda que os programadores corrijam a vulnerabilidade ao aplicar qualquer uma das (ou ainda melhor, todas as) seguintes opções:
- Assegurar que os campos da ação, do pacote e dos componentes do intent de base estão definidos;
- Assegurar que o PendingIntent só é enviado a componentes fidedignos;
- Utilizar o JOIN_IMMUTABLE (adicionado no SDK 23) para criar PendingIntents. Isto impede que as apps que recebem o PendingIntent sejam preenchidas em propriedades não preenchidas. Se a app também for executada em dispositivos com o SDK 22 ou anterior, recomendamos que os programadores apliquem as opções anteriores enquanto reforçam a criação do PendingIntent com o padrão:
if (android.os.Build.VERSION.SDK_INT >= 23) {
// Create a PendingIntent using FLAG_IMMUTABLE
} else {
// Código existente que cria um PendingIntent
}
2. Envie o APK atualizado
Para enviar um app bundle ou APK atualizado:
- Aceda à Play Console.
- Selecione a app.
- Aceda ao Explorador de app bundles.
- Selecione a versão da app do APK/app bundle que não está em conformidade no menu pendente na parte superior direita e tome nota dos lançamentos em que se encontram.
- Aceda à faixa com o problema de política. Será uma destas 4 páginas: Testes internos/fechados/abertos ou Produção.
- Junto à parte superior direita da página, clique em Criar novo lançamento. (Pode ter de clicar primeiro em Gerir faixa)
- Se o lançamento com o APK em violação estiver no estado de rascunho, rejeite o lançamento.
- Adicione a versão em conformidade com a política dos app bundles ou APKs.
- Certifique-se de que a versão que não está em conformidade dos APKs ou dos app bundles está na secção Não incluídos deste lançamento. Para obter mais orientações, veja a secção "Não incluídos (app bundles e APKs)" neste artigo de ajuda da Play Console.
- Para guardar todas as alterações efetuadas ao lançamento, selecione Guardar.
- Quando terminar de preparar o lançamento, selecione Rever lançamento.
Se o APK não que não está em conformidade for lançado em várias faixas, repita os passos 5 a 9 em cada faixa.
Durante este período, a nova app ou a atualização da app estará num estado em revisão até que o seu pedido seja revisto. Se a app não tiver sido atualizada corretamente, continuará a ver o aviso.
Estamos aqui para ajudar
Se tiver perguntas técnicas acerca da vulnerabilidade, pode publicar uma mensagem no Stack Overflow e usar a etiqueta "android-security". Para obter um esclarecimento sobre os passos que tem de seguir para resolver este problema, pode contactar a nossa equipa do apoio técnico.