Le navigateur secret caché dans les paramètres Google
(matan-h.com)- Dans la fenêtre contextuelle Manage my account d’Android, un écran pouvant accéder à des sites web ordinaires s’ouvre, et il est aussi accessible depuis Settings et la suite d’applications Google
- Le chemin d’accès passe successivement par l’onglet Security de la gestion du compte Google, Password Manager, l’aide sur le chiffrement sur l’appareil, les règles de confidentialité, puis le menu Search
- Cet écran permet même de lire des vidéos YouTube, mais il n’a ni historique de navigation ni barre d’adresse, et le bouton retour ramène à l’écran des paramètres plutôt qu’à l’historique web
- Dans la console JavaScript, on voit un objet
mmet les fonctionscloseView(),requestSecurityKeyHandshake()etupdateSecurityKey(), mais l’usage réel de certaines fonctions n’est pas confirmé - Google a d’abord répondu qu’il ne s’agissait pas d’une faille de sécurité et que le contournement du contrôle parental était aussi un comportement prévu, mais a indiqué 3 jours après la publication et les articles de presse qu’il réexaminerait le signalement
Un navigateur caché qui s’ouvre dans les paramètres Android
- Plusieurs applications Android disposent d’une fenêtre contextuelle Manage my account, accessible aussi depuis des applications majeures comme Settings et la suite d’applications Google
- Après quelques étapes, l’intérieur de la fenêtre contextuelle se comporte comme un navigateur capable d’accéder à des sites web ordinaires
- Settings → Google, ou sélectionner “Manage my account” dans une application permettant de choisir un compte
- Dans l’onglet “Security”, sélectionner “Password Manager”
- Sélectionner l’icône
Settingsen haut à droite - Sélectionner “Set up on-device encryption” → “Learn more about on-device encryption”
- Dans le menu hamburger, aller à “Privacy Policy”
- Appuyer sur le menu à 9 points en haut, attendre environ 5 secondes, puis sélectionner “Search”, ou aller à l’élément
Google - En se déconnectant du compte Google, il est possible de l’utiliser comme un navigateur permettant d’aller où l’on veut
- Dans cet état, la lecture de vidéos YouTube est également possible, et l’écran s’ouvre à l’intérieur de l’application Settings ou de l’application depuis laquelle on est arrivé au départ
-
Différences avec un navigateur classique
- Aucun historique de navigation n’est conservé
- À la fermeture de la session, le compte Google connecté est automatiquement déconnecté
- Il n’y a pas de barre d’adresse
- Appuyer sur la touche retour ne revient pas à la page web précédente, mais du côté des paramètres de Password Manager
L’objet JavaScript mm et la réponse de Google
- Dans une console JavaScript mobile comme eruda, on peut observer un objet JavaScript nommé
mm - L’objet
mmcomporte trois fonctionscloseView(): ferme le navigateur et se comporte à peu près comme lorsqu’on appuie sur la touche retourrequestSecurityKeyHandshake(): sa fonction n’a pas été confirmée, mais son nom paraît sensibleupdateSecurityKey(): sa fonction n’a pas été confirmée, mais son nom paraît sensible
- Comme ce navigateur s’ouvre depuis le parcours de la fonctionnalité on-device encryption, l’éventuel lien entre les deux fonctions non confirmées et la configuration des clés de chiffrement locales reste une supposition
- Google a répondu au premier signalement qu’il ne s’agissait pas d’une faille de sécurité et que le contournement du contrôle parental relevait d’un “Intended Behavior”
- Après la publication de l’article, plusieurs médias anglophones, russophones et autres en ont parlé, et 3 jours après la publication Google a indiqué qu’il réexaminerait ce signalement
- Une discussion connexe est disponible sur Hacker News discussion
2 commentaires
Quand j’allais dans la gestion des mots de passe, j’avais l’impression que quelque chose réagissait avec un léger temps de retard… Donc ce n’était peut-être pas juste une impression.
Commentaires sur Hacker News
J’ai un peu enquêté, et quand on appuie sur « Manage my account », on ne reste pas dans l’app Paramètres, on bascule vers une Activity intégrée à Google Play Services
Au final, le navigateur était
com.google.android.gms/.auth.folsom.ui.GenericActivity, et il ne semblait pas utiliser Chrome, qui est l’implémentation système WebView par défaut sur mon téléphoneAndroid permet de créer une interface entre le code Android et le code JavaScript avec
addJavascriptInterface, et GMS semble pas mal l’utiliser, donc ça ressemble à une surface d’attaque intéressante à examiner plus tardL’interface suspecte
mmse trouve dansMagicArchChallengeViewet renvoie à la classe obfusquéebwuz.bwuzelle-même est presque vide, mais renvoie à son tour vers quelques classes obfusquéesEn cherchant dans les chaînes de caractères, on voit que deux classes,
"qvc"et"pdn", exposent des fonctions liées ;pdnsemble être la pièce maîtresse, etqvccontient des logs d’erreur utiles qui révèlent à quoi correspondent les paramètressetVaultSharedKeysattend un tableau d’objets JSON contenantgaiaId,epochet deux valeurskey, puis le transforme en liste avant de le passer à une classe abstraite qui semble fortement liée à la sécurité des comptesaddEncryptionRecoveryMethodattendgaiaId, une liste de domaines de sécurité et une clé publique de membre, puis transmet aussi tout cela à la même classe abstraiteJe me suis arrêté là parce que je devais partir au travail, mais il semble utile de creuser davantage cette interface, ainsi que d’autres interfaces que GMS expose au WebView
https://developer.android.com/reference/android/webkit/WebVi...
Même si c’est Blink, il y a de fortes chances que ce ne soit pas aussi à jour que ce que fournit Chrome. D’après le lien vers la doc, ça semble bien être WebKit
https://2021.stateofthebrowser.com/speakers/alex-russell/
gaiaIdsignifie Google Accounts and ID Administration ID ; celui qui a trouvé ce nom pour ce qui est en gros l’identifiant unique global de Google devait être assez fier de lui, et à juste titreJe ne vois pas en quoi c’est différent des autres WebView intégrés. Presque toutes les apps n’embarquent-elles pas un WebView intégré pour des choses comme « afficher la politique de confidentialité » ?
Il est souvent bien plus simple d’afficher du HTML que de confier toute la politique de confidentialité au développeur de l’app
Si je me souviens bien, configurer un WebView pour autoriser plusieurs domaines ou URL était déjà assez compliqué. Je ne suis pas développeur Android, et la dernière fois que j’y ai touché remonte à quelques années
L’histoire de la gestion des clés reste encore largement spéculative, et l’auteur n’a pas testé ce que cela faisait réellement ; on en est plutôt au niveau de « il y a deux méthodes qui ont l’air effrayantes, mais on ne sait pas exactement ce qu’elles font »
C’est un peu comme l’époque où on accédait à Internet depuis des fichiers d’aide CHM quand le navigateur était bloqué
Bon sang, ça trahit mon âge
C’est exactement comme la manière dont je contournais le contrôle parental de Windows quand j’étais enfant
Je n’avais droit qu’à une heure d’ordinateur, et une fois le temps écoulé, toutes les apps étaient fermées sauf celles de Microsoft Office, soi-disant pour la productivité
En cliquant un peu partout, j’avais fini par trouver comment ouvrir un navigateur dans Outlook et jouer à des jeux Flash sur Miniclip
On remplaçait le navigateur par défaut par Terminal, puis on ouvrait Word pour y créer un lien et cliquer dessus. En temps normal, le Terminal lancé de façon classique était limité, par exemple en empêchant l’ouverture d’autres apps, mais cette instance de Terminal ouverte ainsi avait davantage de droits, ce qui permettait de lancer des jeux sur un disque inséré avec
open /path/to/your/appQuand le prof de permanence est venu demander si on avait le droit de jouer à Starcraft, j’ai répondu : « comme vous le savez, ces ordinateurs sont assez verrouillés, donc si on arrive à faire tourner ce jeu, c’est sûrement que l’école l’autorise ». Je n’arrive toujours pas à croire que ça ait marché
Si un enfant arrive à trouver ce hack et à accéder à des sites bloqués, je pense qu’il l’a bien mérité
Il y avait une méthode de contournement similaire sur la page des licences de
aboutIl suffisait de suivre les liens vers les licences et on obtenait un navigateur. Pratique pour faire apparaître un navigateur sur des systèmes comme des autoradios ou des vélos Peloton
On dirait la liste de tous les fichiers du système de fichiers
L’expérience de cette personne qui a signalé un bug à Google me rappelle la mienne
Moi : il y a un bug dans Google Sheets qui expose à des tiers du contenu supprimé
Google : ce n’est pas un bug. Fonctionnement intentionnel. Ticket fermé
Moi : vraiment ? J’ai subi un préjudice réel en utilisant cette application
Google : en fait, c’est bien un bug, mais c’est un problème connu depuis longtemps, donc il n’entre pas dans le programme de bug bounty. Ticket fermé
Moi : il y a un bug dans Gmail qui permet à un e-mail falsifié de masquer l’échec de DKIM et d’apparaître comme légitime
Google : "Won't fix (Intended Behavior)"
Moi : Google considère donc vraiment comme intentionnel que des e-mails falsifiés paraissent légitimes dans l’interface ?
Google : en fait, c’est un problème connu
En plus, les premiers articles essayaient de relier cette vulnérabilité à des opérations de piratage chinoises/russes. Cette propagande devrait être renvoyée à Google lui-même. Google est une entreprise américaine, et il a laissé une porte dérobée grande ouverte que n’importe qui pouvait exploiter, à l’étranger comme dans le pays. En pratique, les deux l’ont exploitée
Google a un vrai problème. Je ne sais pas ce qui s’est passé depuis 2019, mais ce n’est pas bon
Moi : il y a un bug dans Google Play Services
Google : ce n’est pas un bug. Fonctionnement intentionnel. Ticket fermé
Moi : j’ai publié le bug sur mon blog, et les médias en ont largement parlé
Google : il semble que nous nous soyons trompés ! C’est bien un bug. Nous vous recontacterons dans quelques semaines
J’ai découvert aujourd’hui qu’il existe une console JavaScript mobile
https://eruda.liriliri.io/
On peut ouvrir les outils de développement depuis un autre ordinateur, et toutes les informations sont synchronisées via WebSocket. Je l’ai déjà utilisée une fois pour déboguer un problème sur l’équipement d’un client
data:text/html,, mais celui-ci est étonnamment riche en fonctionnalitésJe faisais la même chose dans le hall pendant que mes parents faisaient leurs opérations bancaires
À l’époque, les tags best viewed in Netscape Navigator étaient une mine d’or. Le procédé était presque le même : on cliquait jusqu’à tomber sur un tag de ce genre, puis on passait de là à un moteur de recherche
Ensuite je suis allé sur un site de streaming plein d’adwares douteux, et au moment où j’ai changé de vidéo, tout l’ordinateur de la Tesla s’est figé et il a fallu faire un redémarrage forcé de la voiture
Ça me rappelle les anciennes versions de Windows. En appuyant sur F1, on pouvait déclencher diverses commandes d’exécution via Windows Help
explorer.exepuis choisir Run »