Atualização de segurança da extensão do LastPass

Descoberta de incidente: 31 de março de 2017 (20h10)

No sábado, dia 25 de março, um pesquisador de segurança do Project Zero do Google, Tavis Ormandy, relatou ter descoberto uma falha de segurança nas extensões do LastPass para navegadores. Nas últimas 24 horas, lançamos uma atualização que acreditamos que solucionará a vulnerabilidade em todos os navegadores e confirmamos seu funcionamento com o próprio Tavis.

A maioria dos usuários receberá a atualização automaticamente. Verifique se você está executando a versão mais recente (4.1.44 ou superior), disponível para download em https://www.lastpass.com/.

Agora que o problema foi resolvido, gostaríamos de deixar uma mensagem para nossa comunidade sobre o que essa descoberta significou para nós e como estamos deixando o LastPass melhor e mais seguro daqui para frente. Dada a natureza da vulnerabilidade, a mensagem é altamente técnica.

Visão geral

  • A vulnerabilidade que abordamos ocorreu no lado do cliente das extensões do LastPass para navegadores e poderia ser explorada para roubar dados e manipular nossa extensão
  • Para que a exploração ocorresse, o usuário seria atraído a um site mal-intencionado (por phishing, spearphishing, ou outra forma de ataque) ou para um site confiável com um adware mal-intencionado
    • Seria necessário um ataque por usuário, executado pelo navegador local do usuário
  • Todas as extensões foram reparadas e enviadas para as lojas de extensões
    • Nossos aplicativos móveis para Android e iOS não foram afetados
  • Todas as suas extensões do LastPass para navegadores devem ser atualizadas para a versão 4.1.44 ou superior
    • Clique no ícone da extensão do LastPass > Mais opções > Sobre LastPass para verificar qual é a sua versão
    • A maioria dos usuários recebem atualizações automaticamente, mas as versões mais recentes estão sempre disponíveis em https://www.lastpass.com/
    • Não é necessário desinstalar a extensão para baixar a versão atualizar

Mensagem

A descoberta

Essa vulnerabilidade do lado do cliente nas extensões do LastPass para navegadores foi causada pelo modo como o LastPass se comporta em “mundos isolados”. Como observado, “um mundo isolado é um ambiente de execução de JavaScript com o mesmo DOM (Document Object Model) de outros mundos, mas sem compartilhar algumas coisas, como variáveis e funções. Sem os mundos isolados, páginas sem privilégios podem ter interferências em scripts com mais privilégios para fazer o que quiserem.” Quem usa a versão binária da extensão, ou seja, menos de 10% dos usuários do LastPass, poderia haver uma manipulação para permitir uma execução remota de código na extensão.

 “Mundos isolados” e páginas confiáveis

O funcionamento do LastPass baseia-se em scripts de conteúdo. Scripts de conteúdo são trechos de JavaScript que injetamos em sites externos para captar informações de login e executar o recurso de autocompletar. É contando com isso que o LastPass é tão útil. Em troca, o script de conteúdo se comunica com o restante da extensão para fazer o trabalho pesado: descriptografar os sites salvos, atualizar o cofre e assim por diante. O restante da extensão fica completamente inacessível para sites externos, sem poder interferir nos scripts de conteúdo.

Basicamente, os scripts de conteúdo ficam separados do resto do site pelo conceito dos “mundos isolados”. Com os mundos isolados, nossos scripts de conteúdo podem ler os conteúdos DOM de um site externo, mas sem contato com nenhuma função ou variável interna de JavaScript. O contrário também se aplica: o site externo não pode executar nenhuma função nem acessar variáveis dos nossos scripts de conteúdo. A função dessa separação é manter ambos os lados a salvo de manipulação externa.

Em alguns casos, essas variáveis podem influenciar a lógica do script de conteúdo. É difícil injetar valores arbitrários no JavaScript usando esta técnica. No entanto, em uma manobra particularmente engenhosa, a descoberta demonstrou que strings arbitrárias poderiam ser injetadas, e uma dessas era o bastante para enganar a extensão para fazê-la pensar que estava executando em lastpass.com. Assim, um invasor poderia manipular a extensão do LastPass para revelar os dados armazenados pelo usuário, iniciando executáveis arbitrários no caso da versão binária.

Estamos supondo que podemos confiar no escopo global em que nossos scripts de conteúdo rodam, e isso se provou não ser o caso. Consequentemente, houve muitos locais em nosso JavaScript em que foi possível que variáveis globais e de fontes externas substituísse um valor padrão.

Solução do problema

Imediatamente após recebermos o relatório da descoberta, uma equipe de resposta multidisciplinar investigou e confirmou o problema. Ficou claro que a solução exigiria uma mudança significativa em nossas extensões para navegadores. Não se tratava de uma simples correção: seria necessário um reparo completo e meticuloso. Daí, essas mudanças precisariam ser aplicadas e testadas em todas as extensões afetadas.

Em suma, todo o cuidado para solucionar essa vulnerabilidade exigiu muito esforço, fazendo nossa equipe trabalhar sem parar para concluir os reparos no menor tempo possível.

Na solução, mexemos na manipulação de variáveis e acrescentamos o objeto Proxy para o escopo externo do script de conteúdo, funcionando como uma “sandbox” para evitar que propriedades de janelas de fontes externas fossem lidas dentro do script de conteúdo. Para mitigar ainda mais a execução remota de código, implementamos restrições nos tipos de anexos que a extensão pode abrir e limitamos as APIs disponíveis.

Trabalhamos diretamente com o Project Zero do Google para conferir se o que fizemos foi abrangente o suficiente. Após concluirmos o reparo para todas as extensões afetadas, pudemos submetê-las à análise de todas as lojas para elas chegassem aos nossos usuários o mais rápido possível. Gostaríamos de agradecer a nossos parceiros da Apple, Google, Microsoft, Mozilla, Opera, Yandex e outros que agilizaram a análise e a liberação de nossas extensões.

O que vem por aí

Recomendamos que outros desenvolvedores de extensões fiquem atentos a este padrão em seus códigos para garantir que não estejam vulneráveis.

Por estarmos no ramo de gerenciamento de senhas, a segurança é e sempre será nossa prioridade máxima. Temos grande admiração pelo trabalho da comunidade de segurança que desafia nosso produto e coopera com nossas equipes para garantir que prestemos um serviço seguro a nossos usuários. Como líderes de mercado, temos a nata da comunidade testando o LastPass e, em troca, quem ganha são os nossos clientes e o nosso software em si.

A fim de manter o mais alto nível de segurança, continuaremos em parceria com pesquisadores white-hat e incentivaremos a participação em nosso programa de relato de bugs (https://bugcrowd.com/lastpass). Fique atento a mais informações.

Atenciosamente,

A Equipe LastPass

____________________________________________________________________________________________________________________________

27 de março de 2017 (19h10)

No fim de semana, um pesquisador de segurança do Google, Tavis Ormandy, relatou ter descoberto uma nova vulnerabilidade no lado do cliente na extensão do LastPass para navegadores. No momento, estamos sanando a vulnerabilidade.  Esse ataque é atípico e altamente sofisticado. Queremos evitar a divulgação de algo específico sobre a vulnerabilidade ou no que estamos trabalhando para solucioná-la a fim de não revelar algo para pessoas mal-intencionadas. Portanto, aguarde uma publicação mais detalhada quando tivermos concluído nosso trabalho.

Por ora, gostaríamos de agradecer a pessoas como Tavis, que ajudam a LastPass a elevar cada vez mais seus padrões de segurança e cooperam com nossas equipes para que continuemos sendo o gerenciador de senhas mais seguro do mercado. Queremos também relembrar a nossos usuários algumas providências que podem protegê-los ainda mais desses tipos de problemas.

  1. Use o cofre do LastPass como uma plataforma de acesso – Abra sites diretamente do cofre do LastPass. Esse é o jeito mais seguro de acessar sites e suas credenciais até que essa vulnerabilidade seja resolvida.
  2. Use a autenticação de dois fatores em todos os serviços que a oferecerem – Sempre que possível, habilite a autenticação de dois fatores nas suas contas; muitos sites já oferecem essa opção para aumentar a segurança.
  3. Fique atento a ataques de phishing – Esteja sempre alerta para evitar tentativas de phishing. Não clique em links enviados por pessoas desconhecidas ou que doestem do estilo de comunicação de contatos e empresas em quem você confia. Veja nossas dicas para evitar tentativas de phishing.

Divulgaremos novas informações sobre a correção após a conclusão.