1 puntos por GN⁺ 2023-06-27 | 2 comentarios | Compartir por WhatsApp
  • En el popup Manage my account de Android se abre una pantalla desde la que se puede navegar a sitios web normales, y también se puede acceder desde Settings y el conjunto de apps de Google
  • La ruta de acceso pasa por la pestaña Security de la administración de la cuenta de Google, Password Manager, la ayuda de cifrado en el dispositivo, la política de privacidad y el menú Search, en ese orden
  • Esta pantalla incluso permite reproducir YouTube, pero no tiene historial de navegación ni barra de direcciones, y al volver atrás regresa a la pantalla de configuración en lugar del historial web
  • En la consola de JavaScript aparecen el objeto mm y las funciones closeView(), requestSecurityKeyHandshake() y updateSecurityKey(), aunque no se ha confirmado el uso real de algunas de ellas
  • Google respondió al principio que no era una vulnerabilidad de seguridad y que la evasión del control parental también era un comportamiento intencional, pero 3 días después de la publicación y la cobertura en medios informó que volvería a revisar el reporte

El navegador oculto que se abre dentro de la configuración de Android

  • Varias apps de Android tienen el popup Manage my account, y se puede acceder a él también desde apps principales como Settings y el conjunto de apps de Google
  • Tras pasar por varios pasos, el interior del popup funciona como un navegador capaz de ir a sitios web normales
    • Settings → Google o, en una app donde se pueda elegir cuenta, seleccionar “Manage my account”
    • En la pestaña “Security”, seleccionar “Password Manager”
    • Seleccionar el ícono Settings en la esquina superior derecha
    • Seleccionar “Set up on-device encryption” → “Learn more about on-device encryption”
    • En el menú hamburguesa, ir a “Privacy Policy”
    • Pulsar el menú de nueve puntos de la parte superior, esperar unos 5 segundos y luego seleccionar “Search”, o ir a la opción Google
    • Si se cierra sesión en la cuenta de Google, se puede usar como un navegador capaz de ir a donde se quiera
  • En este estado incluso es posible reproducir videos de YouTube, y la pantalla se abre dentro de la app Settings o de la app desde la que se entró originalmente
  • Diferencias frente a un navegador normal

    • No deja historial de navegación
    • Al terminar la sesión, cierra automáticamente la sesión de la cuenta de Google conectada
    • No tiene barra de direcciones
    • Al pulsar la tecla de retroceso, no vuelve a la página web anterior sino a la configuración de Password Manager

El objeto JavaScript mm y la respuesta de Google

  • En una consola móvil de JavaScript como eruda se puede ver un objeto JavaScript llamado mm
  • El objeto mm tiene tres funciones
    • closeView(): cierra el navegador y funciona de manera similar a cuando se pulsa la tecla de retroceso
    • requestSecurityKeyHandshake(): su función no se ha confirmado, pero por el nombre parece una función sensible
    • updateSecurityKey(): su función no se ha confirmado, pero por el nombre parece una función sensible
  • Como este navegador se abre desde la ruta de la función on-device encryption, la posibilidad de que las dos funciones no verificadas estén relacionadas con la configuración de claves de cifrado locales sigue siendo solo una especulación
  • Google respondió al reporte inicial que no era una vulnerabilidad de seguridad y que la evasión del control parental era “Intended Behavior”
  • Después de la publicación del artículo, varios medios en inglés y ruso, entre otros, cubrieron el tema, y 3 días después de la publicación Google informó que volvería a revisar ese reporte
  • Hay una discusión relacionada en Hacker News discussion

2 comentarios

 
wedding 2023-06-28

Cuando entrabas al administrador de contraseñas, se sentía como si todo respondiera con un pequeño retraso... quizá no era solo mi imaginación.

 
GN⁺ 2023-06-27
Comentarios de Hacker News
  • Investigué un poco y, al pulsar "Manage my account", no se queda dentro de la app de Configuración, sino que abre una Activity embebida dentro de Google Play Services
    Al final, el navegador era com.google.android.gms/.auth.folsom.ui.GenericActivity, y no parecía usar Chrome, que es la implementación predeterminada de WebView del sistema en mi teléfono
    Android puede crear una interfaz entre código Android y código JavaScript con addJavascriptInterface, y parece que GMS usa bastante eso, así que se ve como una superficie de ataque que valdría la pena revisar después
    La interfaz sospechosa mm está dentro de MagicArchChallengeView y enlazada a la clase ofuscada bwuz. bwuz en sí está casi vacía, pero vuelve a enlazar con algunas clases ofuscadas más
    Si buscas por cadenas, las clases "qvc" y "pdn" exponen funciones relacionadas, y pdn parece ser la pieza clave, mientras que qvc tiene logs de error útiles que revelan qué es cada parámetro
    setVaultSharedKeys espera un arreglo de objetos JSON con los valores gaiaId, epoch y key, lo convierte en una lista y se lo pasa a una clase abstracta que parece estar profundamente relacionada con la seguridad de la cuenta
    addEncryptionRecoveryMethod espera gaiaId, una lista de dominios de seguridad y una clave pública de miembro, y también se lo pasa a la misma clase abstracta
    Aquí me detuve porque tenía que irme a trabajar, pero parece que valdría la pena investigar más no solo esta interfaz, sino también otras interfaces que GMS expone al WebView
    https://developer.android.com/reference/android/webkit/WebVi...

    • Me intriga por qué no usa el WebView predeterminado del sistema. ¿Eso significaría que usa WebKit en vez de Blink?
      Incluso si fuera Blink, parecería poco probable que estuviera tan actualizado como lo que entrega Chrome. Viendo el enlace de la documentación, parece que sí es WebKit
    • Alex Russell comentó en State of the Browser 2021 que el WebView de Android no es Chrome
      https://2021.stateofthebrowser.com/speakers/alex-russell/
    • Que gaiaId signifique Google Accounts and ID Administration ID... quien le puso ese nombre a lo que en la práctica es el identificador global único de Google seguro se sintió bastante orgulloso, y con razón
  • No veo qué tiene esto de diferente frente a cualquier otro WebView embebido. ¿No mete casi cualquier app un WebView embebido para cosas como "ver la política de privacidad"?
    Muchas veces mostrar HTML es muchísimo más fácil que entregarle toda la política de privacidad al desarrollador de la app

    • Exactamente eso es. Es el navegador embebido, Android System WebView, que se usa cuando la app no es en sí un navegador
    • ¿Se puede visitar cualquier sitio web arbitrario con un WebView así? Nunca he logrado hacerlo
      Según recuerdo, también era bastante difícil configurar un WebView que permitiera varios dominios o URL. No soy desarrollador Android y la última vez que toqué eso fue hace años
    • Este WebView parece tener funciones JavaScript privilegiadas para gestión y recuperación de claves del administrador de contraseñas
    • Si desde cualquier app con un WebView embebido se pudiera saltar el control parental, entonces este sería un bug más grande de Android
      Lo de la gestión de claves sigue siendo bastante especulativo, y el autor no probó realmente qué hacen, así que por ahora estamos en el nivel de “hay dos métodos que no sé qué hacen, pero se ven aterradores”
    • Hace años en iTunes también se podían hacer cosas así medio en broma. No estoy seguro de que sea un problema tan grande
  • Esto se parece un poco a cuando uno accedía a internet desde un archivo de ayuda CHM cuando el navegador estaba bloqueado
    Maldición, ya se me nota la edad

    • ¿Ahora la edad se revela por el exploit? ¿Qué tal esta?: “En una terminal de la biblioteca de la universidad entré a sitios por gopher, lancé una sesión telnet y revisé durante el verano el correo de una universidad de otro estado”
    • También lo usaba para volver a instalar juegos que el administrador había borrado
    • En nuestra preparatoria escapábamos de una especie de shell raro de bookshelf abriendo Windows Explorer desde el diálogo de abrir archivo del Bloc de notas. Creo que era un producto de IBM
  • Es exactamente igual a cómo de niño me saltaba la app de control parental de Windows
    Solo tenía una hora de uso de la computadora y, al acabarse el tiempo, cerraba todas las apps excepto las de Microsoft Office porque se consideraban de productividad
    Picándole a todo, de alguna manera logré abrir un navegador dentro de Outlook y jugar juegos Flash en Miniclip

    • Me recordó cómo en la preparatoria nos saltábamos Macs bloqueadas. Solo se podían ejecutar ciertas apps y ni siquiera se podía abrir System Preferences, pero en Safari sí se podía cambiar el navegador web predeterminado
      Cambiábamos el navegador predeterminado a Terminal, luego abríamos Word, creábamos un enlace y le dábamos clic. Normalmente, el Terminal abierto de forma normal estaba restringido, por ejemplo fallaba al intentar lanzar otras apps, pero la instancia de Terminal abierta de esta manera tenía más permisos, así que con open /path/to/your/app podías lanzar cosas como juegos desde un disco que hubieras insertado
      Cuando el maestro que vigilaba el estudio llegó y preguntó si se nos permitía jugar Starcraft, le respondí: “Como usted sabe, estas computadoras están bastante bloqueadas, así que si podemos jugar este juego, supongo que la escuela lo permitió”. Todavía no puedo creer que eso funcionara
  • Si un niño puede descubrir este hack y entrar a sitios bloqueados, diría que se ganó ese derecho

    • También puede ser que no lo haya descubierto por sí mismo, sino que lo haya leído en internet o se lo haya contado otro niño
  • Había un bypass parecido en la página de licencias de about
    Si seguías un enlace hasta una licencia, aparecía un navegador. Útil para abrir un navegador en cosas como unidades principales de autos o bicicletas Peloton

    • Acabo de abrir la página de "Third-party licenses" en un Pixel 6 y me salió una lista interminable de enlaces
      Parece un listado de todos los archivos dentro del sistema de archivos
  • La experiencia de esta persona reportando un bug a Google me recordó a la mía
    Yo: hay un bug en Google Sheets donde contenido eliminado queda expuesto a terceros
    Google: no es un bug. Funciona como fue diseñado. Cerramos el caso
    Yo: ¿en serio? Yo sufrí un perjuicio real usando esta aplicación
    Google: en realidad sí es un bug, pero como es un problema conocido desde hace mucho no califica para bug bounty. Cerramos el caso

    • A mí me pasó casi exactamente lo mismo cuando reporté una vulnerabilidad a Google
      Yo: hay un bug en Gmail que permite que un correo falsificado oculte un fallo de DKIM y parezca legítimo
      Google: "Won't fix (Intended Behavior)"
      Yo: ¿de verdad Google pretende que en la interfaz un correo falsificado se vea como normal?
      Google: en realidad es un problema conocido
    • Yo tuve la misma experiencia. Google solo me dio respuestas vagas, y meses después el responsable de TAO anunció la corrección de la vulnerabilidad que yo había señalado originalmente
      Encima, los primeros artículos intentaron vincular esa vulnerabilidad con hackeos de China/Rusia. Esa propaganda deberían devolvérsela al propio Google. Google es una empresa estadounidense y dejó la puerta trasera completamente abierta para que cualquiera la explotara, tanto del extranjero como dentro del país. De hecho, ambos la explotaron
      Google tiene un problema real. No sé qué pasó desde 2019, pero no pinta bien
    • También tengo algo que agregar a esta historia
      Yo: hay un bug en Google Play Services
      Google: no es un bug. Funciona como fue diseñado. Cerramos el caso
      Yo: publiqué el bug en mi blog y salió bastante en la prensa
      Google: ¡parece que estábamos equivocados! Sí es un bug. Nos pondremos en contacto otra vez en unas semanas
  • Hoy me enteré de que existe una consola de JavaScript móvil
    https://eruda.liriliri.io/

    • También hay una versión remota hecha por la misma persona: https://github.com/liriliri/chii
      Puedes abrir las herramientas de desarrollador desde otra computadora y toda la información se sincroniza por WebSocket. La usé una vez para depurar un problema en el equipo de un cliente
    • Estaría bueno que hubiera un bookmarklet. Las herramientas de desarrollador del navegador actual también empezaron así, o sea, con Firebug
    • Está buenísimo. No funciona en Brave para iOS, pero sí en Safari, así que con eso basta
    • No sé si solo me pasa a mí, pero no funciona para nada. Aunque pegue el snippet de JavaScript en la barra de direcciones, no pasa nada, y en Nightly termina haciendo una búsqueda en Google con esa cadena
    • A veces me tomo la molestia de usar incluso data:text/html,, pero esto es sorprendentemente completo
  • Yo hacía algo parecido en el lobby mientras mis padres hacían trámites bancarios
    En esa época la etiqueta best viewed in Netscape Navigator era una mina de oro. El flujo era casi igual: ibas presionando hasta que aparecía una de esas etiquetas y desde ahí saltabas a un motor de búsqueda

    • Una vez usé esto en un Tesla prestado para llegar, a través de la app de YouTube, a un navegador que permitía video casi a pantalla completa
      Después entré a un sitio de streaming lleno de adware sospechoso y, en cuanto cambié a otro video, toda la computadora del Tesla se congeló y tuve que hacer un reinicio forzado del auto
  • Me recordó a versiones antiguas de Windows. Al presionar F1 podías disparar varios comandos de ejecución a través de Windows Help

    • Eso fue exactamente lo primero que se me vino a la mente. Se siente como ese método de Windows 95/98 para saltarse la pantalla de inicio de sesión: “F1 → abrir archivo de ayuda → Other... → clic derecho en explorer.exe y elegir Run”