Vulnerabilidade traversal do caminho

Estas informações são destinadas aos desenvolvedores com apps que apresentam a vulnerabilidade traversal do caminho.

O que está acontecendo

Em 16 de janeiro de 2018, o Google Play passou a bloquear a publicação de novos apps ou atualizações com a vulnerabilidade de Path Traversal. 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

As implementações de openFile em ContentProviders exportados podem ser vulneráveis quando não validam corretamente os parâmetros Uri de entrada. Um app malicioso pode fornecer um URI (com "/../", por exemplo) criado para induzir o app a retornar um ParcelFileDescriptor de um arquivo localizado fora do diretório esperado. Isso permite que esse programa nocivo acesse todos os arquivos disponíveis para o app.

Existem duas estratégias recomendadas para eliminar a vulnerabilidade traversal do caminho em um ContentProvider.

1. Se não for necessário expor seu ContentProvider aos outros apps, faça o seguinte:

2. Se for necessário expor seu ContentProvider aos outros apps, veja estas instruções:

É preciso garantir que as entradas para o openFile com caracteres de traversal do caminho não façam com que seu app retorne arquivos inesperados. Para isso, verifique o caminho canônico do arquivo. Por exemplo:

public ParcelFileDescriptor openFile (Uri uri, String mode)
   throws FileNotFoundException {
 File f = new File(DIR, uri.getLastPathSegment());
 if (!f.getCanonicalPath().startsWith(DIR)) {
   throw new IllegalArgumentException();
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Atenção: não é seguro chamar getLastPathSegment no parâmetro Uri. Um app malicioso pode fornecer um caminho do URI codificado, como %2F.%2F..path%2Fto%2Fsecret.txt, para que o resultado de getLastPathSegment seja /../../path/to/secret.txt. Por exemplo, a implementação a seguir ainda é vulnerável a ataques.

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

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?