 C'est pour ça qu'il y a une salle de sécurité dans le Microsoft Edge Groussure et un topic pour cette prochaine phase. Donc, s'il vous plaît, donnez-vous une salle de sécurité. Bienvenue à la présentation. Casser les politiques de sécurité du Microsoft Edge. Moi, c'est Nick Hill et je vais vous guider dans cette recherche. Avant de commencer cette présentation, je voudrais vous demander combien d'entre vous utilisez les extensions de navigateurs dans cette salle. Alors, une extension de navigateurs, c'est quelque chose qui étend les fonctionnalités des navigateurs. Alors, on a des exemples typiques comme les bloqueurs de publicité. Donc, là qui bloque les publicités sur certains sites comme YouTube et aussi des gestionnaires de mode pass, par exemple. Donc, ces extensions peuvent gérer pas mal de vos données parce qu'ils peuvent gérer les cookies, les modes passes. Et donc, ça veut dire qu'on doit juste mettre d'accord que ces extensions sont dangereuses puisque pouvoir gérer les cookies, les marques-pages, etc. Alors, par exemple, une extension assez simple comme elle bloque plus sur Microsoft Edge. Bon, là, c'est son jeu. Alors, comment je fais pour savoir ce que cette extension est capable de faire dans mon navigateur. Alors, par exemple, je regarde cette liste-là. Alors, elle a pas mal de permission. Alors, cette extension très simple peut lire, modifier le contenu, lire, modifier vos favoris, lire les sites que vous visitez, modifier tout ce que vous envoyez recevée et lire toutes vos données de navigation personnelles et envoyer des notifications. Donc, cette simple extension, elle bloque. Elle peut faire tout ça. Alors, vous pourriez demander comment ces permissions sont reconnues. Donc, comment les navigateurs peuvent reconnaître d'où viennent ces permissions. Alors, il y a un modèle de permission dans les extensions. Donc, on a ce fichier manifest.json. Et dans ce fichier, il y a les permissions. Et donc, dans ce tableau de permission, un petit exemple. Vous voyez une URL, https www.google.com. Ensuite, la permission bookmark, cookie, story, storage, tabs. Donc, cette extension est assez simple. Elle a la permission de lire les marques-pages des cookies. Elle peut les manipuler. Elle peut en ajouter, les enlever, et d'autres permissions importantes de même. Par ça, les permissions les plus intéressantes qu'il y a, et que je cherchais, c'est la permission d'accès à un autre. Donc, c'est quelque chose qui définit sur quel domaine l'extension peut se lancer. Alors, par exemple, j'ai besoin qu'on ait afficté la permission www.google.com. Cette extension peut se lancer uniquement sur google.com, et pas sur les sous-domains. Par exemple, mail.google.com. Donc, c'est ce qu'on définit dans cette petite boîte, que cette extension peut lire ou modifier du contenu sur certains sites, comme www.google.com. Donc, ce qu'on peut aussi mettre comme type de version, c'est www.google.com. Dans ce cas-là, on couvre aussi les sous-domains, et la troisième type de permission qu'on peut avoir. Donc, on peut mettre www.google.com. Donc, dans ce cas-là, ça marche sur tous les protocoles, par exemple, le FTP. À part ces trois permissions, il y a une autre permission qui existe, qui est allurals. Donc, cette permission est spéciale, parce que ça veut dire que l'extension est affectée à toutes les URL. Elle donne le droit d'exécuter du code JavaScript sur tous les domaines. Donc, google.com, ou n'importe quoi d'autre. Donc, tous les domaines. Mais, il y a quelques restrictions sur la permission allurals. Elle ne peut pas se lancer sur les pages privilégiées. Alors, une page privilégiée, c'est une page dans le navigateur qui contient des données sensibles ou du navigateur. Donc, par exemple, les pages de paramètres qui contiennent les paramètres. Donc, ça, c'est sur Chrome. On peut modifier des paramètres de carte de crédit, etc. Dans ce cas-là, on peut imaginer une situation où l'extension est capable d'écrire du JavaScript sur un chat. Et puis, en fait, elle peut modifier tous les mots de passe et les informations de carte de crédit. Alors, sur Edge, on a une page similaire about flags. Ici, on peut voir une extension qui a cette permission allurals. Elle peut essentiellement tout modifier. Alors, sur cette page about flags, sur la première page, vous voyez qu'il y a un certain nombre de permissions importantes. Par exemple, activer add up flash player. Ou d'autres fonctionnalités. Et puis, on peut avoir la consommation de mémoire restreinte pour les développeurs. On peut activer, désactiver des fonctionnalités expérimentales, JavaScript, etc. Donc, vous voyez à quel point cette page contient des paramètres sensibles. Donc, comme je l'ai dit, une extension a un fichier manifest.json qui liste notamment toutes les permissions et d'autres permissions. Donc, un autre fichier dont on a besoin, c'est popup.html. Et des conclics sur une extension de navigateur. Et ensuite, on a popup.js, qui contient seulement du JavaScript, qui va effectuer des actions liées à ce qu'il y avait dans popup.html. Donc, ça, c'est comment notre extension, c'est ce à quoi elle ressemblerait dans Edge. Donc, dès qu'on clique sur le logo de l'extension, la popup va apparaître et afficher ce message avec deux options, Open ou Execute. Donc, si on clique sur Open, ça va charger Google.com dans le navigateur. Alors que si on clique sur Execute, ça va effectuer un alert de un. Et du coup, tout le travail est fait par popup.js. Donc, si on regarde la source du fichier manifest.json, ce qu'il faut remarquer, c'est qu'on va pouvoir regarder les permissions à la ligne 10. Ce qu'on voit ici, c'est une entrée htps.shlas3w.google.com. Ça veut dire que l'extension devrait tourner seulement pour google.com et pas sur les sous-domains. Donc, voilà le code de popup.html. C'est un fichier html simple. On a deux boutons, un qui est Open, notre qui est Execute. On charge gs.shpopup.js et c'est tout. Et pour popup.js, donc c'est très court aussi. Ce qu'il fait, c'est que lorsqu'on clique sur le bouton Open, ça charge google.com. Si on clique sur le bouton Execute, ça effectue un alert sur le domaine du document grand. Il y a beaucoup d'API qu'on peut utiliser pour les extensions de navigateurs. Par exemple, l'API Tabs, l'API Proxy. L'API Tabs, pour moi, est d'un entérêt particulier. Elle fournissent quelques fonctionnalités. Par exemple, tabs.create, qui permet de créer un nouveau English. Et il y a également la fonction Update. Et la méthode duplicate est aussi importante, parce qu'elle va permettre de dupliquer un English déjà ouvert. Donc Execute Script, comme on pourrait s'y attendre, elle permet d'exécuter du Javascript. Donc Hide et Reload, dont on comprend aussi la signification. Et il y en a plein d'autres. Ce qui nous intéresse, c'est Create, Duplicate et Update. Voyons ce qui se passe si on veut charger Bing.com. Donc on va pouvoir faire ça en utilisant ce qui est affiché sur la slide. Donc ça, c'est dans la documentation. Et cette façon de faire, elle est destinée aux gens bien intentionnés. Et ce n'est pas exactement ce qu'on est. Donc qu'est-ce qui se passe si on utilise ça pour lire des fichiers locaux. Donc si on donne l'URL d'un fichier local pour voir comment le navigateur va essayer de l'ouvrir. Juste après, on a une erreur dans Edge qui dit je ne peux pas ouvrir cette page, vérifier que vous avez la bonne adresse, etc. Donc Donc globalement ça fait des opérations sur l'extension et ça essaie de l'ouvrir et le fichier, il n'a pas l'air d'exister donc ça résulte en une erreur. C'est assez général. Ça va aussi fonctionner pour d'autres navigateurs qui ne vont pas vous permettre d'ouvrir de cette manière des fichiers locaux. Donc par exemple des erreurs qu'on va obtenir dans Edge ou dans Chrome. Donc dans les deux cas, on va avoir un message d'erreur qui dit que ça ne va pas être possible parce qu'on veut protéger l'utilisateur. Donc vu que la méthode create n'a pas fonctionné, on va essayer un peu de quelque chose de similaire avec la méthode update. Donc on va essayer de fournir une URL qui correspond à un fichier local et voir si ça fonctionne. Donc en fait ça fonctionne et maintenant on va essayer de faire la même chose pour une page privilégiée. Et en fait ça fonctionne également. Lorsqu'on clique sur le bouton open, ça fonctionne et dans Edge, on a bien la page About Flags qui sort. Donc quand j'ai signalé ça à Microsoft, ce qu'ils ont dit c'est que on n'a pas le support pour le pays de l'Odnode et du coup on va pas spécialement s'intéresser à fixer ça. Ce que je me suis dit c'est qu'ensuite j'allais passer par du JavaScript. Donc on peut utiliser cette syntaxe assez pratique. Donc ici dès qu'on trigger le href, on va avoir alerte et on va effectivement avoir une pop-up qui correspond à ce alerte qui apparaît. Donc ça s'exécute en référence au domaine principal pas comme pour les URL tout à l'heure. Donc on peut voir ici que le domaine affiché ce n'est pas le même à gauche et à droite. Donc les vendeurs de navigateurs ont décidé de rendre ça à safe. Du coup on va poursuivre un petit peu sur JavaScript et en essayant de bypasser les permissions. Si on essaie d'ouvrir un tab avec create to open et en utilisant une URL en JavaScript, ça ne va pas fonctionner. Mais si on essaie avec la méthode update et qu'à nouveau on fournit une URL sous la forme d'une URL JavaScript avec un alerte du document.domaine, alors cette fois ça fonctionne. Donc on peut voir à l'écran que l'URL devrait afficher le contenu de Google.com alors que le site affiche plutôt le domaine Bing.com L'utilisateur va croire que ça ne devrait pas fonctionner sur d'autres domaines que Google.com. Donc à nouveau ça a été informé. Mais ils ont dit on va pas corriger ça. Même si maintenant on a les expressions en code de JavaScript également. Ils ont dit on comprend ce que vous essayez de dire mais pas un, parce que ça fonctionnerait également en essayant de faire des alertes sur les cookies, de voler les cookies d'un utilisateur. Donc on a en bypass des OS permissions sur Edge. On va pouvoir voler des mails Google ou de la donnée qui vient de Facebook ou n'importe quoi d'autre. Donc par exemple supposons qu'on a un mail sur Gmail qui dit qu'on a un coupon de réduction pour du cache back sur Paypal avec le code qui correspond au coupon. Donc ici on utilise la méthode update sur le paytabs. Donc on va récupérer un email avec un ID particulier et ouvrir leak.html et appeler le leak.html Donc quand on clique sur le bouton open ça va récupérer le mail que l'on ciblait, celui avec l'ID qu'on a fourni. Donc ce poc a été envoyé à Microsoft et la même chose pour les fichiers locaux aussi. Donc dans ce cas ça va fonctionner aussi. Donc si vous vous rappelez avant quand on a travaillé sur les fichiers locaux, Microsoft a dit on va pas fixer ça parce qu'on ne supporte pas la payton load et maintenant on a aussi la code d'exécution sur JavaScript sur les fichiers locaux. Donc on peut combiner tout ça pour voler des fichiers locaux. Donc ici on va avoir d'une part un update sur un fichier local et un update sur une URI JavaScript. Donc qu'est-ce qu'on fait ensuite ? Donc on a de l'exécution sur les autres domaines, on a des recoutournements des privilèges. Alors ce qu'on va essayer maintenant c'est, on va reparler des pages privilégiées. Alors là j'étais tellement excité que ça marchait sur les pages privilégiées et donc je vais encore essayer de décrire ce petit morceau de code et je l'ai essayé sur About Flags. Et bizarrement en fait ça marchait pas pour moi et j'étais plutôt surpris. Je me suis dit mais pourquoi et ensuite j'ai essayé de comprendre pourquoi ça marchait pas avec cette implementation là, pourquoi ça marchait pas et pourquoi il y avait peut-être des alertes dans la console. Donc j'ai ouvert la console pour voir et en fait il n'y avait pas du tout ces alertes. Et la raison c'est que ces pages sensibles du navigateur comme Chrome, Firefox et même Edge, en fait ils utilisent du CSRP pour éviter qu'il y ait de l'exécution de JavaScript et en fait vous ne pouvez pas avoir ces alertes sur ces pages. Et alors j'ai, qu'est-ce que c'est que cette image noire qui marche pas sur les pages privilégiées puisqu'on n'a pas des erreurs CSP. Donc peut-être que cette fois Edge est plus intelligent ou peut-être qu'en fait il y a une autre façon de lire About Flags sur Edge et lorsque je me suis dit ensuite c'est ah mais on va utiliser le protocole RES. Alors le protocole RES il permet de lire des ressources depuis certains modules et donc par exemple About Flags c'est Edge HTML.dll.flags.htm et c'est là qu'on se rend compte que ça marche. Alors de cette façon-là on a réussi à obtenir l'exécution de code JavaScript sur les pages privilégiées, ce qui est quand même assez mauvais. Donc maintenant qu'on a l'exécution sur une page privilégée on peut activer, désactiver le flash player donc on peut le faire exactement de la même manière. Donc le faire c'est je vais encore appeler browser.app.upd le faire pointer vers le rl en REST.flags.htm et ensuite j'utilise une url pour activer le lector flash. Qu'est-ce qu'on peut faire ensuite ? Alors bon c'était plutôt déjà pas mal pour moi mais comme à chaque fois je me suis demandé peut-être faire encore autre chose et alors je me suis dit on va regarder le mode lecture de Edge. Donc c'est une feature qui est implémentée dans Edge et qui permet de faire le rendu d'une page d'une manière qui est plus facile à lire. Donc pendant le rendu on va enlever tout le code Javascript etc. En fait ça va permettre de fournir une page simplifiée à l'utilisateur et pour ça on enlève toutes les écussions de code Javascript dans le mode lecture. Du coup on peut pas mettre n'importe quel document en mode lecture il faut que Edge arrive à repérer la compatibilité mais donc si on a une url qui pointe vers un domaine particulier on peut lire récupérer des ressources bon j'essayais de faire la même chose mais apparemment le mode lecture était protégé par une sorte de CSP et donc il autorise pas les scripts inline et donc c'était bloqué bon j'ai pas réussi à aller plus loin donc bon jusqu'ici le mode lecture avait l'air pas mal alors on peut essayer d'utiliser de l'exécution de code Javascript sur d'autres pages par exemple et notamment les pages qui sont définies à l'intérieur d'autres extensions donc par exemple est-ce qu'une extension peut désactiver quelque chose qui est dans une autre extension et donc si on va sur les pages interne d'autres on revoit encore cette même erreur CSP qui nous empêche d'exécuter de code Javascript donc les privilèges de CSP on va regarder si on peut utiliser l'API execute script directement pour voir si ça permettrait de contourner le CSP sur ces pages puisque donc là vous pouvez voir le code donc avec la politique de sécurité de contenu qui est réglée à self et on refait browser.app.execut script et puis du code qui assemble alerte sur le domaine du document et la façon dont l'extension gère le CSP alors en fait les navigateurs autorisent le Javascript dans toutes les extensions sauf si elle essaye de travailler de changer le dom dans une page particulière donc là par exemple si besoin qu'on ait sur une page avec tout à fait avec le CSP pour cette page alors par exemple on peut utiliser document.write ou document.body.inner.html égal à un peu de code Javascript et une autre façon de faire c'est de gérer un élément et écrire dedans et toutes ces techniques permettent de manipuler l'arbre du dom d'une page protégée par le CSP ça c'était pas du tout autorisé ni par Firefox ni par Chrome mais en fait c'était pas protégé à l'intérieur d'Edge et donc le script comme ça pouvait exécuter n'importe quel code Javascript sur n'importe quel domaine même si le CSP était en place sur cette page alors en conclusion les extensions Edge sont encore de développement toutes les APIs sont pas encore supportées parce que Edge est passée sur une base d'utilisateur premium et ce qui est encore en train de développer les extensions c'est pas trop mais Active Tab ça reste l'une des permissions plus simple puisque ça permet d'exécuter du code Javascript sur le domaine courant et bon ça permet de lancer la même attaque sur cet API Microsoft a enfin décidé de corriger le bag avec la mise à jour de mars 2019 avec la plus grosse récompense possible donc c'est le CVE 2019 0678 merci Nekil pour cette présentation si vous avez des questions on a 3 micros et si vous avez une question venez au micro Bonjour merci pour cette présentation intéressante donc j'ai une question est ce que vous avez trouvé c'est aussi pertinent pour l'API qui vient sur Chromium prochainement donc la réponse est vu que la nouvelle version Edge tourne sur Chromium donc ils utilisent d'autres conventions d'appel et du coup j'ai une 2ème question donc vous avez essayé d'ouvrir les pages avec le protocole ROS mais est ce qu'on peut pas faire la même chose avec le protocole et la réponse est oui ça va aussi fonctionner ok applaudissez notre speaker