Diretórios expostos incorretamente ao FileProvider

Categoria do OWASP: MASVS-STORAGE - Armazenamento

Visão geral

Um FileProvider configurado incorretamente pode expor acidentalmente arquivos e diretórios a um invasor. Dependendo da configuração, um invasor pode ler ou gravar nesses arquivos expostos, o que pode levar à exfiltração de informações sensíveis ou, na pior das hipóteses, à execução arbitrária de códigos. Por exemplo, um aplicativo com o <root-path> definido na configuração pode permitir que um invasor acesse informações sensíveis armazenadas em bancos de dados ou substitua as bibliotecas nativas do app. Isso pode levar à execução arbitrária de códigos.

Impacto

O impacto varia dependendo da configuração e do conteúdo do arquivo, mas geralmente causa vazamento de dados (na leitura) ou substituição (na gravação).

Mitigações

Não usar o elemento de caminho <root-path> na configuração

O <root-path> corresponde ao diretório raiz do dispositivo (/). Permitir o uso dele na configuração fornece acesso arbitrário a arquivos e pastas, incluindo o sandbox do app e o diretório /sdcard, que oferecem uma superfície de ataque muito ampla para um invasor.

Compartilhar intervalos de caminho estreitos

No arquivo de configuração de caminho, evite compartilhar um intervalo de caminho amplo, como . ou /. Isso pode levar à exposição de arquivos sensíveis por engano. Compartilhe um intervalo de caminho limitado/estreito e garanta que somente os arquivos que você quer compartilhar estejam nesse caminho. Isso evita a exposição de arquivos sensíveis por engano.

Um arquivo de configuração típico com configurações mais seguras pode ser assim:

XML

<paths>
    <files-path name="images" path="images/" />
    <files-path name="docs" path="docs" />
    <cache-path name="cache" path="net-export/" />
</paths>

Verificar e validar os URIs externos

Valide os URIs externos (usando um esquema content) e verifique se eles não estão apontando para os arquivos locais do seu aplicativo. Isso evita qualquer vazamento acidental de informações.

Conceder permissões mínimas de acesso

Um content URI pode ter permissões de acesso de leitura e gravação. Garanta apenas a permissão mínima de acesso necessária. Por exemplo, se a permissão somente de leitura for necessária, conceda explicitamente apenas a permissão FLAG_GRANT_READ_URI_PERMISSION.

Evitar usar <external-path> para armazenar/compartilhar informações sensíveis

Dados sensíveis, como informações de identificação pessoal (PII), não podem ser armazenados fora do contêiner do aplicativo ou das instalações de armazenamento de credenciais do sistema. Evite usar o elemento <external-path>, a menos que você tenha verificado explicitamente que as informações armazenadas ou compartilhadas não são sensíveis.

Recursos