Gerenciadores de senhas que usam a API de preenchimento automático do Android Oreo são potencialmente vulneráveis ​​ao vazamento de dados

Uma possível falha de segurança na API Autofill do Android Oreo permite que gerenciadores de senhas vazem dados como senhas, endereços ou cartões de crédito.

Preenchimento automático é um dos maiores e mais divulgados novos recursos introduzidos com o lançamento do Android 8.0 Oreo. Muitos aplicativos diferentes de gerenciamento de senhas, como o LastPass, já implementaram essa nova API em seus aplicativos. E embora possa provar ser bastante a melhoria em relação às implementações anteriores de preenchimento automático usando serviços de acessibilidade, há uma possível falha de segurança a ser considerada. No mês passado, um white paper foi publicado no GitHub, documentando uma falha inerente na API Android Oreo Autofill que poderia potencialmente fazer com que seu gerenciador de senhas vaze mais dados pessoais do que você permitiu. Faremos um rápido resumo do white paper escrito por Mark Murphy (mais conhecido como CommonsWare) e publicado em sua página GitHub em 8 de agosto de 2017.


Potencial falha de vazamento de dados na API de preenchimento automático do Android Oreo

Como funciona a falha?

A implementação do preenchimento automático no Android Nougat (e versões anteriores) e em navegadores como o Google Chrome é algo realmente simples. Normalmente, os aplicativos de gerenciamento de senhas usariam os Serviços de Acessibilidade para verificar o conteúdo da tela em busca de uma caixa de login e recomendar o preenchimento automático de dados com base no que encontrar. Embora funcionasse, pode causar um atraso considerável.

No Android Oreo, isso funciona de maneira um pouco diferente, já que os aplicativos de senha agora são oficialmente suportados pela API de preenchimento automático. Os aplicativos de senha de terceiros não exigem mais serviços de acessibilidade, pois agora podem desempenhar a função de um serviço de preenchimento automático, comunicando-se com os aplicativos por meio do Autofill Framework. Quando o usuário se concentra em um widget, o sistema empacota algumas informações sobre esse widget/formulário e as envia para o aplicativo de preenchimento automático. O aplicativo então retorna dados de preenchimento automático relevantes, como senhas, e-mails, cartões de crédito ou qualquer outro tipo de dados confidenciais. O sistema Android atua como intermediário entre o aplicativo que armazena os dados e aquele que os solicita.

Aplicativo de preenchimento automático no Android 8.0 Oreo

No entanto, aplicativos maliciosos ou malware podem tirar proveito do recurso de preenchimento automático para obter mais dados para si próprios. Uma atividade maliciosa pode solicitar dados adicionais de preenchimento automático para serem inseridos com um widget invisível ou oculto. Embora o usuário concorde em preencher um dos widgets visíveis, como um formulário de login ou algo semelhante, o widget invisível também obtém dados adicionais sem que você os veja. Isso pode ser muito perigoso se a informação vazada for sua senha, endereço ou detalhes de cartão de crédito!

As capturas de tela acima mostram um aplicativo de teste malicioso aproveitando essa falha de segurança.

A resposta do Google para o problema

Segundo o CommonsWare, esse problema de segurança ainda não possui uma solução pública publicada pelo Google. No entanto, sabemos que o Google está ciente do problema. CommonsWare afirma que os engenheiros do Google reconheceram que o problema existe em um relatório privado do rastreador de problemas, mas que seria difícil (se não impossível) corrigi-lo ou lançar uma correção.

Mas isso não significa que o preenchimento automático seja completamente inseguro de usar, já que o Google está adotando outra abordagem para garantir a segurança dos dados. A empresa é pressionando para que os serviços de preenchimento automático resolvam o problema e, como tal, está tentando conscientizar os desenvolvedores para melhorar seus provedores de preenchimento automático e torná-los mais seguros. O que está sendo proposto exatamente?

Em primeiro lugar, provedores de preenchimento automático devem particionar seus dados. Em vez de manter todos os dados de preenchimento automático em um único pool, os desenvolvedores devem dividir os dados do usuário armazenados em partições. Por exemplo, uma partição de endereço/telefone, uma partição de cartão de crédito, uma partição de senha/nome de usuário, etc. O serviço de preenchimento automático só deve devolver os dados de uma partição por vez com base no widget em foco. Este é um dos páginas disponíveis publicamente em aplicativos de preenchimento automático protegendo-se contra vazamento de dados para widgets invisíveis.

Há também algumas outras coisas que os desenvolvedores de gerenciadores de senhas deveriam fazer, de acordo com os engenheiros do Google. Por exemplo, o provedor de preenchimento automático só deve devolver os dados ao aplicativo específico que os forneceu. Isso deve ser feito verificando o nome do pacote e a assinatura pública do aplicativo para que mesmo um APK modificado não possa acessá-lo. A outra coisa seria que os aplicativos de preenchimento automático exigem autenticação antes de realmente fornecer os dados, com essa atividade de autenticação informa ao usuário que tipo de dados serão fornecidos ao aplicativo que os solicita. Na verdade, esse conselho contém muitos erros, o mais importante é que esses conselhos não são realmente aplicados pelo Google.

Tenha em mente que muitas das propostas acima foram retiradas do relatório do rastreador de problemas privados do CommonsWare, e não de qualquer página de documentação oficial do Google. Para obter uma análise mais técnica de como os aplicativos que usam a API Autofill podem se proteger desse tipo de ataque, recomendamos fortemente que você leia o white paper completo da CommonsWare.

Quais aplicativos estão protegidos contra essa falha?

Entramos em contato com os desenvolvedores do 1Password, Enpass e LastPass sobre essa vulnerabilidade, e as equipes de segurança por trás desses três aplicativos reivindicado que eles são seguro, embora ainda não tenhamos verificado essas afirmações.

Como podemos perceber nos depoimentos acima, o 1Password exige autenticação do usuário antes do preenchimento dos dados, avisando também quais dados serão preenchidos previamente. Isso também ajuda no problema do preenchimento silencioso, já que um pop-up de autenticação aparecerá para cada atividade solicitando dados de preenchimento automático.

O Enpass nunca revelará todas as chaves ao aplicativo solicitante, seja ele malicioso ou genuíno. Somente os itens salvos que correspondam ao nome do pacote do aplicativo solicitante serão apresentados ao usuário. Eles também confirmaram que implementarão mais medidas seguindo o conselho do Google.

Além disso, o LastPass nos confirmou que, embora não soubessem do problema antes do lançamento do Android Oreo, seu aplicativo usa particionamento de dados para proteger os usuários, junto com outras verificações para garantir que o LastPass preencha apenas o aplicativo associado à entrada.

Embora não deva haver absolutamente nenhum problema ao usar esses três aplicativos, se quiser ficar completamente limpo, você deve desativar preencha automaticamente completamente em seu telefone até que você possa confirmar com o desenvolvedor do gerenciador de senhas que o aplicativo dele está seguro nesta linha de ataque. Felizmente, isso pode ser feito facilmente acessando Configurações > Sistema > Idiomas e entrada > Avançado e encontrando a preferência "Serviço de preenchimento automático", tocando nela e selecionando "Nenhum".

Como dissemos acima, não se sabe se o Google pode realmente corrigir isso, portanto, usar aplicativos confiáveis ​​ou simplesmente desativar o recurso é a única maneira de se manter seguro. Se você quiser ler mais sobre este assunto e todos os detalhes associados a ele, você deve ler o original white paper documentando isso no GitHub.


Este artigo foi atualizado em 13/09/17 para refletir com mais precisão as implicações das respostas do LastPass, Enpass e 1Password.