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 Console. Apó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
- 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.
- Atualize as aplicações afetadas e corrija a vulnerabilidade.
- 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:
- Pode modificar a etiqueta <provider> do ContentProvider afetado no seu manifesto para definir android:exported=”false”. Isto impede que outras aplicações enviem intenções para o ContentProvider afetado.
- Também pode definir o atributo android:permission como uma autorização com android:protectionLevel=“signature” para evitar que as aplicações escritas por outros programadores enviem intenções para o ContentProvider afetado.
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.