Vulnerabilidade de transposição do caminho

Estas informações destinam-se aos programadores com aplicações que contêm a vulnerabilidade de transposição do caminho

O que está a acontecer

A partir de 16 de janeiro de 2018, o Google Play começou a bloquear a publicação de novas aplicações ou atualizações que contenham a vulnerabilidade de transposição do caminho. Consulte o aviso na Play ConsoleApós os prazos apresentados na Play Console, as aplicações que contenham vulnerabilidades de segurança não corrigidas poderão ser removidas do Google Play.

Ação necessária​

  1. Inicie sessão na Play Console e navegue até à secção Alertas para ver quais as aplicações afetadas e os prazos para resolver estes problemas.
  2. Atualize as aplicações afetadas e corrija a vulnerabilidade.
  3. Envie as versões atualizadas das aplicações afetadas.

Depois de voltar a enviar, a sua aplicação será revista novamente. Este processo pode demorar várias horas. Se a aplicação obtiver a aprovação na revisão e for publicada com êxito, não será necessária qualquer ação adicional. Se a aplicação falhar na revisão, a nova versão da aplicação não será publicada e receberá uma notificação por email.

Detalhes adicionais

As implementações de openFile em ContentProviders exportados está sujeita a vulnerabilidades se estes não validarem corretamente os parâmetros de URI recebidos. Uma aplicação maliciosa pode fornecer um URI concebido (por exemplo, um que contenha "/../") para induzir a sua aplicação em erro de forma a devolver um ParcelFileDescriptor para um ficheiro fora do diretório pretendido e, consequentemente, permitir que a aplicação maliciosa aceda a qualquer ficheiro acessível à sua aplicação.

Existem duas estratégias recomendadas para eliminar uma vulnerabilidade de transposição do caminho num ContentProvider.

1. Se o ContentProvider não tiver de estar exposto a outras aplicações:

2. Se o ContentProvider tiver de estar exposto a outras aplicações:

Tem de garantir corretamente que as entradas openFile que contêm carateres de transposição do caminho não fazem com que a sua aplicação devolva ficheiros inesperados. Para tal, verifique o caminho canónico do ficheiro. 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);
}
 

Advertências: tenha em atenção que chamar o getLastPathSegment no parâmetro URI não é seguro. Uma aplicação maliciosa pode fornecer um caminho de URI codificado como %2F..%2F..path%2Fto%2Fsecret.txt para que o resultado de getLastPathSegment seja /../../path/to/secret.txt. Por exemplo, as seguintes implementações ainda estão vulneráveis 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 tiver perguntas técnicas acerca da vulnerabilidade, pode publicar uma mensagem no Stack Overflow e utilizar a etiqueta "android-security". Para obter um esclarecimento sobre os passos que tem de efetuar para resolver este problema, pode contactar a nossa equipa de apoio técnico a programadores.

false
Menu principal
11699180880884052905
true
Pesquisar no Centro de ajuda
true
true
true
true
true
5016068
false
false