Skip to content

MASWE-0007: Dados Sensíveis Armazenados Não Criptografados no Shared Storage Sem Requerer Interação do Usuário

Content in BETA

This content is in beta and still under active development, so it is subject to change any time (e.g. structure, IDs, content, URLs, etc.).

Send Feedback

Visão Geral

Os aplicativos frequentemente optam por armazenar dados no armazenamento externo devido à sua maior capacidade. No entanto, essa conveniência traz uma possível desvantagem de segurança. Uma vez que um aplicativo malicioso receba as permissões relevantes, ele pode acessar esses dados sem o consentimento ou interação do usuário a qualquer momento. Além disso, armazenamentos externos como cartões SD podem ser fisicamente removidos e lidos por um ator malicioso. Mesmo que o armazenamento externo seja emulado pelo sistema, o risco surge de permissões de arquivo inadequadas ou do uso indevido de APIs para salvar arquivos. Nesses casos, os arquivos tornam-se vulneráveis a acessos, modificações e exclusões não autorizadas, representando uma ameaça de segurança para o aplicativo.

Os desenvolvedores podem considerar mudar para o Armazenamento Privado ou Armazenamento Compartilhado que Exija Interação do Usuário se precisarem de mais privacidade e segurança. No entanto, se o armazenamento externo for o mais adequado para o aplicativo, é uma boa prática criptografar os dados armazenados nele. Abaixo, você pode encontrar os possíveis impactos de segurança e mitigações relacionados ao uso do armazenamento externo.

Impacto

  • Perda de confidencialidade: Um atacante pode extrair dados sensíveis armazenados externamente, como informações pessoais e mídias como fotos, documentos e arquivos de áudio.

  • Perda de material seguro: Um atacante pode extrair senhas, chaves criptográficas e tokens de sessão para facilitar ataques adicionais, como roubo de identidade ou tomada de conta.

  • Modificação do comportamento do aplicativo: Um atacante pode adulterar dados usados pelo aplicativo, alterando a lógica do app. Por exemplo, ele poderia modificar um banco de dados que descreve o estado de recursos premium ou injetar uma carga maliciosa para permitir ataques adicionais, como injeção de SQL e Path Traversal.

  • Modificação de código baixado: Um aplicativo pode baixar novas funcionalidades da Internet e armazenar o código executável no armazenamento externo antes de carregá-lo no processo. Um atacante pode modificar esse código antes que seja usado pelo aplicativo.

Modos de Introdução

Essa ameaça é principalmente uma preocupação para dispositivos Android, pois eles permitem o uso de armazenamento externo. Mesmo que um dispositivo não tenha armazenamento externo físico, o Android o emula para fornecer acesso à API de armazenamento externo.

  • Dados Armazenados Não Criptografados: Dados sensíveis são armazenados no armazenamento externo sem criptografia.
  • Chave de Criptografia Hardcoded: Dados sensíveis são criptografados e armazenados no armazenamento externo, mas a chave está hardcoded dentro do aplicativo.
  • Chave de Criptografia Armazenada no Sistema de Arquivos: Dados sensíveis são criptografados e armazenados no armazenamento externo, mas a chave é armazenada junto com eles ou em outro local facilmente acessível.
  • Criptografia Utilizada é Insuficiente: Dados sensíveis são criptografados, mas a criptografia não é considerada forte.
  • Reutilização da Chave de Criptografia: A chave de criptografia é compartilhada entre dois dispositivos de um único usuário, permitindo o processo de clonagem de dados entre esses dispositivos no armazenamento externo.

No iOS, os aplicativos não podem gravar ou ler diretamente em locais arbitrários, em comparação com sistemas operacionais de desktop ou Android. O iOS mantém regras rigorosas de sandboxing, o que significa que os aplicativos só podem acessar seus próprios diretórios de arquivos sandboxed.

Mitigações

Dados sensíveis armazenados no armazenamento externo devem ser criptografados, e quaisquer chaves usadas para criptografia de dados devem ser protegidas pelo keystore com suporte de hardware do dispositivo, quando disponível. É altamente desencorajado incluir chaves criptográficas hardcoded dentro do aplicativo. Você também pode considerar armazenar seus arquivos na sandbox privada do aplicativo ou no armazenamento interno e usar o wrapper EncryptedFile API do Android para criptografia de arquivos.

Aviso

A biblioteca de criptografia de segurança do Jetpack, incluindo as classes EncryptedFile e EncryptedSharedPreferences, foi descontinuada. No entanto, como um substituto oficial ainda não foi lançado, recomendamos o uso dessas classes até que um esteja disponível.

Tests

MASTG-TEST-0202: Referências a APIs e Permissões para Acesso ao Armazenamento Externo MASTG-TEST-0200: Arquivos Gravados no Armazenamento Externo MASTG-TEST-0201: Uso em Runtime de APIs para Acesso a Armazenamento Externo