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 Console. Apó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
- Faça login no Play Console e acesse a seção "Alertas" para ver os apps afetados e os prazos para resolver os problemas.
- Atualize esses apps e corrija a vulnerabilidade.
- 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:
- Modifique a tag <provider> do ContentProvider afetado no manifesto para definir android:exported=”false”. Isso evitará que outros apps enviem intents a esse ContentProvider.
- Também é possível definir o atributo android:permission como uma permissão com android:protectionLevel=“signature” para evitar que apps criados por outros desenvolvedores enviem intents ao ContentProvider afetado.
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.