Como corrigir a vulnerabilidade da injeção de fragmento

Estas informações são destinadas aos desenvolvedores com apps usando uma implementação não segura de classes PreferenceActivity, o que os torna suscetíveis à injeção de fragmento. Essa implementação pode permitir que um app externo malicioso carregue fragmentos que devem ser privados.

O que está acontecendo

A partir de 1º de março de 2017, o Google Play passou a bloquear a publicação de novos apps ou atualizações que usam classes PreferenceActivity que podem estar vulneráveis a injeções de fragmentos. Consulte o aviso no Play ConsoleApós os prazos exibidos no Play Console, todos os apps com vulnerabilidades de segurança não corrigidas poderão ser removidos do Google Play.

Ação necessária​

  1. Faça login no Play Console e acesse a seção "Alertas" para ver os apps afetados e os prazos para resolver os problemas.
  2. Atualize esses apps e corrija a vulnerabilidade.
  3. Envie as versões atualizadas dos apps afetados.

Após o reenvio, seu app será revisado novamente. Esse processo pode levar várias horas. Se o app for aprovado na revisão e publicado, nenhuma outra ação será necessária. Se ele for reprovado, a nova versão não será publicada, e você receberá uma notificação por e-mail.

Detalhes adicionais

Sempre que possível, defina "exported=false" para "PreferenceActivity" no seu Manifest. Isso impedirá que apps externos enviem intents para essa classe.

Se a classe PreferenceActivity vulnerável precisar ser exportada para apps externos, determine por que a classe é vulnerável e tome as medidas apropriadas. Existem duas possibilidades:

  1. Implementação incorreta de isValidFragment:

Verifique se a classe vulnerável contém ou herda uma implementação de isValidFragment que retorna verdadeiro em todos os caminhos de código. Caso isso aconteça, atualize a classe para verificar se há uma lista de classes de fragmento permitidas. Por exemplo, se "PreferenceActivity" deve permitir as classes "MyFragment" e nenhum outro fragmento, implemente uma verificação como esta:

         public boolean isValidFragment(String fragmentName) {
            return MyFragment.class.getName().equals(fragmentName);

         }

  1. targetSdkVersion inferior a 19 e não implementa isValidFragment:

Se o app atualmente define "targetSdkVersion" no manifesto para um valor inferior a 19 e a classe vulnerável não contém qualquer implementação de "isValidFragment", a vulnerabilidade é herdada de "PreferenceActivity".

Para correção do problema, os desenvolvedores devem atualizar "targetSdkVersion" para 19 ou valor superior. Como alternativa, se "targetSdkVersion" não puder ser atualizado, os desenvolvedores devem implementar "isValidFragment" como descrito na etapa 1 para verificar se há classes de fragmentos permitidos.

Os apps também precisam estar de acordo com o Contrato de distribuição do desenvolvedor e a política de conteúdo

Estamos aqui para ajudar

Se você tiver dúvidas técnicas sobre a vulnerabilidade, escreva uma postagem no Stack Overflow e use a tag "android-security". Caso precise de mais informações sobre as etapas necessárias para resolver esse problema, entre em contato com nossa equipe de suporte ao desenvolvedor.

Isso foi útil?
Como podemos melhorá-lo?