Extraindo um Token de Sessão Salvo do Sandbox de um App Android

Segurança Mobile Nível 3/4 ~5 min 13 de agosto de 2026

O desafio

Você tem um shell adb num aparelho Android. Um app bancário guarda a sessão logada dentro do seu sandbox de dados privado. Navegue até o diretório de dados do app, leia as preferências salvas e envie o token de sessão que o app deixou no disco.

O que você vai aprender

  • Localizar os dados privados de um app Android em /data/data/<package>
  • Reconhecer arquivos XML do SharedPreferences na pasta shared_prefs
  • Ler um token de sessão salvo em um arquivo de preferências
  • Usar grep para encontrar uma chave como session em todo o sandbox
  • Explicar por que tokens em texto puro no armazenamento do app permitem o sequestro de sessão

Habilidades testadas

Navegação no sistema de arquivos do AndroidAnálise de armazenamento de dados localDescoberta de token de sessãoPós-exploração mobile

Pré-requisitos

  • Familiaridade com comandos básicos de shell (ls, cd, cat, grep)
  • Saber que um id de pacote Android tem a forma com.example.acmebank
  • Entender que apps guardam dados locais em um sandbox privado

Como funciona

Todo app Android recebe um sandbox de armazenamento privado em /data/data/<package>. Dentro dele, a pasta shared_prefs guarda o SharedPreferences do app: configurações simples de chave/valor escritas como arquivos XML simples. Os apps usam esse armazenamento para tudo, de uma flag de modo escuro até, de forma menos sensata, um token de sessão logada. O diretório é privado no sentido de que outros apps não conseguem lê-lo, mas ainda assim são apenas arquivos em disco.

Essa distinção importa no momento em que alguém tem acesso a nível de arquivo. Um aparelho com root, um backup não criptografado, uma imagem forense ou, como aqui, um shell adb podem entrar em /data/data/com.example.acmebank/shared_prefs e abrir auth.xml. O app bancário salvou sua sessão ali como <string name="session">sess_4f91c2ad7e_prod</string>. Nada na leitura exige quebrar o app; o valor está em texto claro ao lado do nome de usuário.

Um token de sessão é uma credencial do tipo bearer: apresentá-la basta para agir como o usuário logado, sem precisar de senha. Por isso, um token recuperado do armazenamento local geralmente pode ser reaplicado diretamente contra a API do app para sequestrar a conta. É por isso que guardar uma sessão ativa em preferências de texto puro é tratado como uma vulnerabilidade real, não apenas cosmética: o limite do sandbox protege contra outros apps, não contra alguém com acesso ao sistema de arquivos do aparelho.

Erros comuns

  • Olhar primeiro na pasta databases. O token aqui está em shared_prefs/auth.xml, não no accounts.db do SQLite - as preferências são o lugar mais simples onde um app guarda uma sessão.
  • Ler o sandbox do app errado. com.android.systemui é a interface do sistema, não o banco; o pacote alvo é com.example.acmebank.
  • Abrir o settings.xml em vez do auth.xml. settings.xml guarda tema e idioma; a sessão de login fica em auth.xml.
  • Supor que o token está criptografado. Ele é armazenado como uma string simples que o app lê de volta ao pé da letra, então basta ler o arquivo.

Como se proteger

O armazenamento local do app não é um lugar seguro para uma credencial do tipo bearer. As correções mantêm o token fora de arquivos legíveis e limitam o dano caso o armazenamento seja exposto:

  • Guardar tokens de sessão com o Android Keystore ou EncryptedSharedPreferences para que o valor em disco fique criptografado em repouso, não em XML simples.
  • Manter os tokens de sessão de curta duração e vinculá-los ao aparelho, para que um token copiado expire rápido e não possa ser reaplicado em outro lugar.
  • Excluir arquivos sensíveis dos backups (definir android:allowBackup="false" ou usar regras de backup) para que o token não seja exportado em um backup em texto claro.
  • Detectar aparelhos com root ou adulterados e recusar persistir credenciais de longa duração neles.

Se um token de sessão foi exposto em disco, invalide essa sessão no lado do servidor e force uma nova autenticação: um token bearer vazado é utilizável até que o servidor pare de aceitá-lo.

Solução completa

Membros Pro e Max desbloqueiam o passo a passo completo.

Assinar Pro

Estatísticas da comunidade

109 resoluções
83% taxa de sucesso
M2F14M3 Primeiro sangue

Hacks de hoje relacionados

24.000+ Hackers 100+ Labs & Cursos Grátis
Comece Grátis