Vulnerabilidade de Roubo de Dados em Android

Não tenho por hábito falar sobre vulnerabilidades específicas só por falar, mas esta é tão engenhosa que merece um blog post.

Foi publicada recentemente uma vulnerabilidade que afecta todos os telefones Android que permite a um atacante ter acesso a qualquer ficheiro no cartão SD (p. ex. fotos tiradas com o telemóvel) sem que o utilizador para tal tenha de fazer nada a não ser visitar um site Web malicioso.

O funcionamento do exploit é simples e engenhoso:

  1. A vítima visita o site malicioso;
  2. O site despoleta o download de um ficheiro html contendo Javascript malicioso (payload.html);
  3. O browser Android faz o download automático (sem pedir confirmação ao utilizador) do ficheiro para “/sdcard/download/payload.html” (Dois problemas aqui: o browser não pede confirmação ao utilizador para fazer o download, e o pathname é previsível);
  4. O site malicioso faz um redirect automático para o ficheiro local, presumo que da forma: file://sdcard/download/payload.html
    content://com.android.htmlfileprovider/sdcard/download/payload.html (mais um problema aqui: o browser permitir o redirect de uma página na Internet para um recurso file:// content://com.android.htmlfileprovider)
  5. O ficheiro html contendo o código Javascript corre com privilégios de local user, que tem acesso a todos os ficheiros do cartão SD, e pode efectuar o upload silencioso de ficheiros locais de volta ao site malicioso.

Há um vídeo a demonstrar esta vulnerabilidade no link acima, que disponibilizo aqui:

http://vimeo.com/17030639

Neste momento todos os telefones do mercado que correm Android estão vulneráveis a isto. A Google já prometeu um patch mas para já só para a próxima versão do Android (2.3 Gingerbread).

Há várias formas de a Google proteger isto, nomeadamente:

  • Impedir redirects de recursos em “http://” para “file://” ou “content://” (julgo que nenhum browser devia permitir isto) – aqui reside a raíz do problema;
  • Implementar uma janela de confirmação de download de ficheiros;

Para já, os utilizadores de Android devem estar atentos, tal como refere o Thomas Cannon no seu site:

  • Estar atentos à zona de notificação por downloads não solicitados;
  • Usar um browser 3rd party (tipo Opera Mobile) que pede confirmação nos downloads;
  • Desligar Javascript (impraticável…);
  • Efectuar o unmount do cartão SD (impraticável…);

É importante que a Google corrija isto depressa, apesar de ser importante ver isto em perspectiva. Quantas aplicações instalamos do Android Maket de autores que desconhecemos que têm acesso completo ao nosso cartão SD e acesso Internet? Estas aplicações podem enviar também qualquer conteúdo do cartão para terceiros…

Se o browser fosse actualizável pelo Market este problema seria corrigido num piscar de olhos. O browser é uma peça de software fundamental e tem de ser rapidamente actualizável. É difícil de entender como é que a Google ainda não tornou esta aplicação modular e passível de ser instalada / actualizada pelo Market. Assim vamos ter de esperar por actualizações ao OS que têm de passar pelo fabricante dos telemóveis e eventualmente pelo operador móvel. Este processo pode demorar longos meses.