1 pontos por GN⁺ 2023-06-27 | 2 comentários | Compartilhar no WhatsApp
  • No pop-up Manage my account do Android, abre-se uma tela capaz de acessar sites comuns, também acessível dentro das configurações e do conjunto de apps do Google
  • O caminho de acesso passa, em sequência, pela aba Security do gerenciamento da conta Google, Password Manager, ajuda sobre criptografia no dispositivo, política de privacidade e menu Search
  • Essa tela consegue até reproduzir YouTube, mas não tem histórico de navegação nem barra de endereço, e o botão voltar retorna à tela de configurações em vez de navegar pelo histórico da web
  • No console JavaScript, aparecem o objeto mm e as funções closeView(), requestSecurityKeyHandshake() e updateSecurityKey(), mas a finalidade real de algumas delas não foi confirmada
  • Inicialmente, o Google respondeu que não era uma vulnerabilidade de segurança e que o bypass do controle parental também era um comportamento intencional, mas, 3 dias após a publicação e a cobertura da imprensa, informou que reavaliaria a denúncia

Navegador oculto que abre dentro das configurações do Android

  • Vários apps do Android têm o pop-up Manage my account, acessível também em apps importantes como as configurações e o conjunto de apps do Google
  • Após alguns passos, o interior do pop-up passa a se comportar como um navegador capaz de acessar sites comuns
    • Em Settings → Google, ou em um app que permita escolher uma conta, selecione “Manage my account”
    • Na aba “Security”, selecione “Password Manager”
    • Selecione o ícone Settings no canto superior direito
    • Selecione “Set up on-device encryption” → “Learn more about on-device encryption”
    • No menu hambúrguer, vá para “Privacy Policy”
    • Toque no menu de 9 pontos na parte superior e aguarde cerca de 5 segundos antes de selecionar “Search”, ou vá para o item Google
    • Ao sair da conta Google, é possível usá-lo como um navegador capaz de ir para onde quiser
  • Nesse estado, também é possível reproduzir vídeos do YouTube, e a tela se abre dentro do app Settings ou do app usado para o acesso inicial
  • Diferenças em relação a um navegador comum

    • Não deixa histórico de navegação
    • Ao encerrar a sessão, faz logout automaticamente da conta Google conectada
    • Não tem barra de endereço
    • Ao pressionar o botão voltar, ele retorna para a área de configurações do Password Manager, em vez de voltar para a página anterior da web

O objeto JavaScript mm e a resposta do Google

  • Em um console JavaScript móvel como o eruda, é possível ver um objeto JavaScript chamado mm
  • O objeto mm tem três funções
    • closeView(): fecha o navegador e se comporta de forma parecida com pressionar o botão voltar
    • requestSecurityKeyHandshake(): a função não foi confirmada, mas pelo nome parece sensível
    • updateSecurityKey(): a função não foi confirmada, mas pelo nome parece sensível
  • Como esse navegador é aberto pelo caminho do recurso de on-device encryption, a possibilidade de as duas funções não confirmadas estarem relacionadas à configuração de chaves de criptografia locais permanece apenas uma especulação
  • Em resposta à denúncia inicial, o Google afirmou que não era uma vulnerabilidade de segurança e que o bypass do controle parental era “Intended Behavior”
  • Após a publicação do texto, vários veículos em inglês, russo e outros idiomas cobriram o caso, e 3 dias depois da publicação o Google informou que voltaria a analisar a denúncia
  • Há uma discussão relacionada no Hacker News discussion

2 comentários

 
wedding 2023-06-28

Quando eu entrava no gerenciador de senhas, sempre parecia que havia uma certa lentidão... pelo visto, não era só impressão minha.

 
GN⁺ 2023-06-27
Comentários do Hacker News
  • Investiguei um pouco, e ao tocar em "Manage my account", em vez de permanecer dentro do app de configurações, ele abre uma Activity embutida no Google Play Services
    No fim, o navegador era com.google.android.gms/.auth.folsom.ui.GenericActivity, e não parecia usar o Chrome, que é a implementação padrão de WebView do sistema no meu celular
    No Android, é possível criar uma interface entre código Android e código JavaScript com addJavascriptInterface, e parece que o GMS usa isso bastante, então parece uma superfície de ataque que vale examinar depois
    A interface suspeita mm está dentro de MagicArchChallengeView e se conecta à classe ofuscada bwuz
    A bwuz em si está quase vazia, mas por sua vez se conecta a algumas outras classes ofuscadas
    Procurando por strings, dá para ver que as duas classes "qvc" e "pdn" expõem funções relacionadas, e pdn parece ser a principal, enquanto qvc tem logs de erro úteis que revelam o que cada parâmetro significa
    setVaultSharedKeys espera um array de objetos JSON com gaiaId, epoch e dois valores key, transforma isso em uma lista e repassa para uma classe abstrata que parece estar profundamente relacionada à segurança da conta
    addEncryptionRecoveryMethod espera gaiaId, uma lista de domínios de segurança e uma chave pública de membro, e também repassa isso para a mesma classe abstrata
    Tive que parar por aqui porque preciso ir trabalhar, mas parece valer a pena investigar mais não só essa interface, como também outras interfaces que o GMS expõe ao WebView
    https://developer.android.com/reference/android/webkit/WebVi...

    • Fico me perguntando por que ele não usa o WebView padrão do sistema. Isso quer dizer que é WebKit em vez de Blink?
      Mesmo que seja Blink, provavelmente não está tão atualizado quanto o que o Chrome fornece. Pelo link da documentação, parece mesmo ser WebKit
    • Alex Russell falou na State of the Browser de 2021 que o WebView do Android não é o Chrome
      https://2021.stateofthebrowser.com/speakers/alex-russell/
    • gaiaId significar Google Accounts and ID Administration ID... quem deu esse nome a um ID globalmente único do Google provavelmente ficou bem orgulhoso, e com razão
  • Não entendo o que isso tem de diferente de outros WebViews embutidos. Quase todo app não coloca um WebView embutido em algo como "ver política de privacidade"?
    Muitas vezes é muito mais fácil exibir HTML do que passar toda a política de privacidade para o desenvolvedor do app

    • É exatamente isso. É o Android System WebView, o navegador embutido usado quando o app em si não é um navegador
    • Dá para visitar sites arbitrários com esse WebView? Nunca consegui
      Pelo que lembro, configurar um WebView para permitir vários domínios ou URLs também era bem difícil. Não sou desenvolvedor Android, e a última vez que mexi nisso já faz alguns anos
    • Esse WebView parece ter funções JavaScript privilegiadas para gerenciamento e recuperação de chaves do gerenciador de senhas
    • Se qualquer app com WebView embutido puder burlar o controle parental, então isso é um bug maior do Android
      Essa história de gerenciamento de chaves ainda é bem especulativa, e o autor não testou o que aquilo realmente faz, então por enquanto é mais algo como “há dois métodos que não sei o que fazem, mas parecem assustadores”
    • Antigamente também dava para fazer algo parecido no iTunes por diversão. Não sei se isso é um problema tão grande assim
  • Isso é meio parecido com acessar a internet por um arquivo de ajuda CHM quando o navegador estava bloqueado
    Droga, entreguei minha idade

    • Agora a gente está revelando a idade pelos exploits? Que tal: “no terminal da biblioteca da faculdade, eu acessava sites por gopher, abria uma sessão telnet e conferia os emails da universidade de outro estado durante as férias de verão”?
    • Eu também usava isso para reinstalar jogos que os administradores tinham apagado
    • Na nossa escola, a gente escapava daquela shell estranha de estante abrindo o Windows Explorer pela caixa de diálogo de abrir arquivo do Bloco de Notas. Acho que era um produto da IBM
  • É exatamente igual à forma como eu burlava o app de controle parental do Windows quando era criança
    Eu só tinha 1 hora de uso do computador, e quando o tempo acabava ele fechava todos os apps, exceto os do Microsoft Office, porque eram considerados produtivos
    Fuçando aqui e ali, de algum jeito consegui abrir um navegador dentro do Outlook e jogar games em Flash no Miniclip

    • Isso me lembra como eu burlava Macs bloqueados no ensino médio. Só dava para executar certos apps e nem dava para abrir o System Preferences, mas no Safari era possível mudar o navegador padrão
      Eu mudava o navegador padrão para o Terminal, depois abria o Word, criava um link e clicava nele
      Normalmente, o Terminal aberto do jeito normal era restrito, por exemplo falhando ao abrir outros apps, mas essa instância do Terminal aberta assim tinha mais permissões, então dava para executar algo como um jogo num disco inserido com open /path/to/your/app
      Quando o professor de estudo dirigido apareceu e perguntou se podia jogar Starcraft, eu respondi: “como o senhor sabe, esses computadores são bem bloqueados, então se a gente consegue jogar isso, é porque a escola permitiu” — e até hoje não acredito que isso funcionou
  • Se uma criança consegue descobrir esse hack e acessar sites bloqueados, eu acho que ela merece aproveitar

    • Pode ser que ela não tenha descoberto sozinha, e sim lido na internet ou aprendido com outras crianças
  • Havia um bypass parecido na página de licenças de about
    Se você seguir os links das licenças, aparece um navegador. É útil para abrir um navegador em coisas como central multimídia automotiva ou bicicletas Peloton

    • Acabei de abrir a página "Third-party licenses" no Pixel 6 e apareceu uma lista interminável de links
      Parece a lista de todos os arquivos no sistema de arquivos
  • A experiência dessa pessoa ao reportar um bug para o Google me lembrou a minha própria experiência
    Eu: há um bug no Google Sheets em que conteúdo excluído fica exposto a terceiros
    Google: não é bug. Está funcionando como pretendido. Issue encerrada
    Eu: sério? Eu de fato sofri prejuízo usando este aplicativo
    Google: na verdade é um bug, mas é um problema conhecido há muito tempo, então não se qualifica para bug bounty. Issue encerrada

    • Quando reportei uma vulnerabilidade ao Google, foi quase exatamente igual
      Eu: há um bug no Gmail que permite que e-mails falsificados ocultem uma falha de DKIM e pareçam legítimos
      Google: "Won't fix (Intended Behavior)"
      Eu: então o Google realmente pretende que e-mails falsificados pareçam legítimos na interface?
      Google: na verdade é um problema conhecido
    • Tive a mesma experiência. Só recebi respostas vagas do Google e, meses depois, o responsável pelo TAO anunciou a correção da vulnerabilidade que eu havia apontado originalmente
      Além disso, as primeiras matérias tentaram ligar a vulnerabilidade a invasões chinesas/russas. Esse tipo de propaganda deveria voltar para o próprio Google. O Google é uma empresa americana e deixou uma backdoor escancarada para qualquer um explorar, seja do exterior ou do próprio país. Na prática, ambos exploraram
      O Google tem um problema sério. Não sei o que aconteceu desde 2019, mas não está bom
    • Também tenho algo a acrescentar a essa história
      Eu: há um bug no Google Play Services
      Google: não é bug. Está funcionando como pretendido. Issue encerrada
      Eu: publiquei o bug no blog, e a cobertura da imprensa foi grande
      Google: parece que estávamos errados! Realmente é um bug. Entraremos em contato novamente em algumas semanas
  • Hoje descobri que existe um console JavaScript para mobile
    https://eruda.liriliri.io/

    • Também existe uma versão remota feita pela mesma pessoa: https://github.com/liriliri/chii
      Dá para abrir as ferramentas de desenvolvedor em outro computador e todas as informações são sincronizadas via WebSocket. Já usei uma vez para depurar um problema no equipamento de um cliente
    • Seria bom se tivesse um bookmarklet. As ferramentas de desenvolvedor dos navegadores atuais também começaram assim, ou seja, com o Firebug
    • Muito bom. No Brave do iOS não funciona, mas no Safari funciona, então já basta
    • Não sei se sou só eu, mas aqui não funciona de jeito nenhum. Colo o snippet JavaScript na barra de endereço e nada acontece; no Nightly ele faz uma busca no Google com aquela string
    • Às vezes eu me dou ao trabalho de usar até data:text/html,, mas isto é surpreendentemente rico em recursos
  • Eu fazia algo parecido no saguão enquanto meus pais resolviam coisas no banco
    Naquela época, a tag best viewed in Netscape Navigator era uma mina de ouro. O fluxo era quase o mesmo: ia clicando até aparecer uma dessas tags e, dali, pulava para um mecanismo de busca

    • Já usei isso num Tesla alugado para chegar, pelo app do YouTube, a um navegador que exibia vídeo quase em tela cheia
      Depois fui para um site de streaming suspeito, cheio de adware, e no momento em que troquei para outro vídeo, o computador inteiro do Tesla travou e tive que fazer um hard reboot no carro
  • Lembra as versões antigas do Windows. Ao apertar F1, dava para disparar vários comandos de execução pelo Windows Help

    • Foi exatamente isso que me veio à cabeça primeiro. Parece aquele método de burlar a tela de login no Windows 95/98 do tipo “F1 → abrir arquivo de ajuda → Other... → clicar com o botão direito em explorer.exe e escolher Run”