 und er liebt die Sicherheitsflöcke in der Microsoft Edge Browser. Zu Beginn meines Vortrags würde ich gerne wissen, wie viele von euch Browser-Erweitungen überhaupt verwenden. Eine Browser-Erweitung ist etwas, was die Möglichkeiten, die Fähigkeiten eures Webbrowsers erweitert. Typische Beispiele sind zum Beispiel Adblock Plus, dass viele nutzen, um Werbung auf bestimmten Websites wie zum Beispiel YouTube zu blockieren oder Grammarly-Passwort-Manager sind auch häufig Browser-Erweitungen und diese Erweitungen können einen Großteil eurer Daten verwalten. Sie können zum Beispiel Cookies, Lesezeichen, Passwörter, den Browserverlauf und so weiter verwalten. Das bedeutet also, dass wir alle zustimmen müssen, dass diese Erweitungen mächtig sind, weil sie eben Cookies, Lesezeichen und weitere sensiblen Informationen des Browsers lesen können. So sieht die Adblock Plus-Erweitung in einem Microsoft Edge aus. Habt ihr euch aber jemand überlegt, was diese Erweitung vielleicht in eurem Browser tun kann? Wenn ihr euch die Einstellung anschaut, dann seht ihr, dass es einige Erlaubnisse gibt. Diese einfache Adblock Plus-Erweitung kann also den Inhalt der Seiten, die ihr besucht, lesen und verändern. Es kann alle Seiten sehen, die ihr besucht und alle Daten lesen die in euren Browser, von eurem Browser herunter oder hochgeladen werden und es kann auch Notifications anzeigen. So eine einfache Erweitung kann also so viele Sachen in eurem Browser anstellen. Also fragt ihr euch vielleicht, wie Browser diese Erlaubnisse erkennen. Die Erweitung kann so viele Sachen in meinem Browser tun, aber wo kommen diese Erlaubnisse überhaupt her? Hier ist ein Erlaubnismodell einer Browser-Erweitung. Hier haben wir eine Datei, die manifest.json heißt. In dieser Datei gibt es einen Array namens Permissions. So kann dieses Array aussehen. Das Erste ist htdpsdoppel.ww.google.com. Die nächste Erlaubnis ist Bookmarks, also Lesenzeichen, Cookies, History, Browserverlauf, Storage und Tabs. Das bedeutet, dass die Erweitung eurer Lesenzeichen lesen, manipulieren, verändern, löschen kann. Das Gleiche geht für die Cookies und den Browserverlauf und andere weiteren Erlaubnisse sind hier auch drin. Davon abgesehen ist die interessanteste Erlaubnis, nach der ich gesucht habe, die Hostzugang-Erlaubnis. Das ist etwas, was definiert, auf welchen Domains eure Erweiterung laufen darf. In diesem Fall, das uns annehmen, dass wir die Erlaubnis für Google.com gegeben haben. Das bedeutet, dass die Erweiterung nur auf Google.com laufen sollte, nicht einmal auf irgendwelchen Subdomains, zum Beispiel Developer oder Mail.google.com. Das sehen wir auch in diesem winzigen Kasten. Der uns sagt, dass die Erweiterung Inhalte auf www.google.com lesen und ändern kann. Diese Erweiterung erlaubt uns, das auf www.sternchen.google.com zu machen, also allen Subdomains. Die dritte Möglichkeit ist auch das Protokoll durch ein Sternchen zu ersetzen, was bedeutet also, dass das Protokoll HTTB, HTTPS oder FDP sein könnte. Abgesehen von diesen drei Erlaubnissen haben wir eine andere Möglichkeit, nämlich all Unterstrich URLs. Das bedeutet, dass die Erweiterung auf jeder Domain, die ihr besucht, ja, was gibt, ausführen kann. Egal, ob das Google.com oder Microsoft.com oder wo auch immer ist, ihr könnt auf ziemlich jeder Domain Code ausführen. Aber es gibt ein paar Unterschiede mit dieser all URLs Erlaubnis. Sie kann nicht auf privilegierten Seiten laufen. Eine privilegierte Seite ist etwas, was irgendwelche sensiblen Einstellungen oder Browser-Daten enthält. Zum Beispiel in Chrome gibt es Chrome-Doppelpunkte, zwei strechstriche Settings. Da sind zum Beispiel Passwörter oder Kreditkarten, Informationen drin. Und ihr könnt euch eine Situation vorstellen, wo die Erweiterung javascript auf der Chrome-Einstellungsseite ändern kann. Und dann könnt ihr sie zum Beispiel Passwörter oder Kreditkarteninformationen klauen. In Edge gibt es eine ähnliche Seite, die ist about doppelpunkt Flags. Hier seht ihr, dass sobald dieser all URLs Erlaubnis zugeheilt wurde, dann kann es Inhalt auf allen Webseiten ändern. Wenn ihr den ersten Teil euch hier anschaut, dann seht ihr, dass es ein paar Möglichkeiten gibt zum Beispiel, Entwickler Features einzuschalten. Es hat auch ein paar Standard Features, zum Beispiel experimentelle Javascript Features. Lass uns mal schnell eine Erweiterung bauen. Wie schon gesagt, hat jede Erweiterung eine Manifestpunkt JSON-Datei, die also alle diese Erlaubnisse und weitere Konfigurationen enthält. Die zweite Datei, die wir brauchen, ist popup.html. Das ist einfach das Interface unserer Browser-Erweiterung, also die Benutzeroberfläche. Sobald ihr eine Browser-Erweiterung anklickt, dann erscheint ein popup Fenster, das euch ermöglicht, irgendwelche Aktionen vorzunehmen, das ist popup.html-Datei. Und dann gibt es noch popup.js, das ist ein Javascript, also die Features dieser extension ermöglicht. So sieht diese Erweiterung in Edge aus. Ihr seht ein winziges Microsoft-Docke und sobald ihr darauf klickt, dann erscheint dieses popup. Das sagt, ich bin die böse Erweiterung. Und dann habe ich zwei Möglichkeit, die erst ist Öffnen, die zweite ist Execute, also Ausführen. Sobald wir auf den Öffnen-Button klicken, dann lädt es google.com im Browser und sobald ihr auf Execute, also Ausführen klickt, dann erscheint dieses Alert-Fenster mit einer Einsterin. Das Interface ist also in popup.html geschrieben und sobald ihr auf Execute, Ausführen klickt, dann wird die Arbeit von popup.js erledigt. Lass uns schnell das manifest.json anschauen. Ihr stellt fest, dass ihr das Permissions-Array in Seite 10 habt. Das enthält HTTPS www.google.com-Sternchen. Das heißt, diese Erweiterung sollte nur auf www.google.com ausgeführt werden, nicht einmal auf den Zapp-Domains. Und so sieht die popup.html aus, das ist einfach eine einfache HTML-Datei mit zwei Buttons, Öffnen und Ausführen. Und am Schluss liegt die popup.js-Datei. Und die sieht so aus, die ist auch sehr kurz. Sobald ihr auf den Open-Knopf drückt, dann öffnet sie google.com und sobald ihr auf Execute, Ausführen klickt, dann öffnet sich ein Alert-Fenster. Öffnet sich ein Alert-Fenster mit der Domain des Dokumentes. Diese Erweiterung haben so viele Schnittstellen, zum Beispiel eine mit der, für den Browserverlauf oder die TAPS. Aber die TAPS-API fand ich so interessant, weil sie es euch ermöglicht, mit verschiedenen TAPS zu spielen, zum Beispiel. Hier hat sie Methoden wie TAPS.Create, die euch erlaubt, ein neues TAP mit einer beliebigen Domain zu erstellen. Auch TAPS.Update, die euch ermöglicht, eine Seite zu einer anderen URL zu umzuleiten. Und TAPS.Duplicate ist auch wichtig, weil sie euch erlaubt, ein schon geöffnetes TAP zu duplicieren. TAPS.ExecuteScript erlaubt euch ein beliebiges Skript auszuführen. Und TAPS.Hide und TAPS.Reload sind relativ selbsterklärend und es gibt noch so viele andere Möglichkeiten. Von diesen waren für mich am interessantesten Create, Update und Duplicate. Wenn wir zum Beispiel Bing.com in einem neuen TAP mit einer Browser extension laden wollen, dann braucht man einfach diese Part sein Code, die also Browser.TAPS.Create aufruft und ihm eine URL übergibt. Und diese URL ist www.bing.com. Das ist Teil der Dokumentation. Und das ist für den Browser, also nicht für uns, für jemand mit meiner bösen Vorstellungskraft, war es interessant, daraus zu finden, ob ich lokale URLs aufrufen kann. Also habe ich die Bing URL ersetzt durch einen lokalen Pfad, um zu sehen, ob ich das TAP erstellen kann oder nicht. Und im nächsten Moment gibt mir Edge diesen schönen Fehler, der mir sagt, dass Edge die Seite nicht erreichen kann. Und es sagt also, dass dies ein relativ Pfad ist. Und als einen relativ Pfad verstanden hat und das einfach an die URL der Erweiterung angehängt hat. Und deswegen bekommen wir diesen Fehler, weil natürlich diese Seite nicht existiert. Das ist eine generelle Sache. Browsers sind sehr zögerlich, euch lokale Dateien laden zu lassen, weil ihr dann Daten exfiltrieren könntet. Hier seht ihr zum Beispiel, ich versuche, lokale Dateien mit JavaScript zu laden. Und jedes Mal sagt es, nein, das darfst du nicht, weil wir unsere Nutzer schützen möchten. Weil wir herausgefunden haben, dass Browser.taps.create für uns nicht funktioniert, habe ich mich als nächstes für Browser.taps.update interessiert. Das Gleiche habe ich mit update probiert und da hat es irgendwie für mich funktioniert. Sobald ich das herausgefunden hatte, dass ich also lokale Dateien laden kann, wollte ich schauen, ob ich auch privilegierte Seiten aufrufen kann. Und auch das hat für mich super funktioniert. Hier seht ihr, dass ich sobald ich auf den Open-Knopf drücke, der Browser eine lokale Datei und auch eine privilegierte Seite für mich leid. Diesen Bug habe ich an Microsoft gesendet und sie haben ja schnell geantwortet. Und sie haben gesagt, wir unterstützen diese Download-APIs. Das heißt, selbst wenn du diese Seite aufrufen kannst, dann bringtest du dir nichts, weil du nichts damit tun kannst. Und dann sagt er, okay, lass uns was anderes probieren. Im nächsten Augenblick kam ich auf die Idee, die JavaScript, ein JavaScript-Ure, zu benutzen. Das ist eine Ure, die mit JavaScript-Doppelpunkt beginnt. Und anschließend kommt der JavaScript-Code. Hier ist ein einfaches Beispiel dafür. Sobald der JavaScript-Doppelpunkt alert1 angeklickt wird, dann bekommst du ein Pop-up in deinem Browser. Das gute an diesen Ure ist, dass sie in der Hauptdomain ausgeführt wird und anders als lokale Dateien. Das sehen wir in diesen Pop-ups, weil das zweite Beispiel eine Null-Domain hat. Wir sehen also das Browser in das Safe machen wollten, auf die Atomweise. Also habe ich entschieden, dass JavaScript your eyes. Keine gute Idee sind hierfür mit Create, aber lass uns das doch mal mit Update versuchen. Also habe ich das mit Browser tab create versucht. Das funktioniert für mich nicht. Und wieder, aber wir haben ja auch noch die Update-Methode und benutzen halt die JavaScript-Ure und rufen JavaScript-Doppelpunkt alert document domain ein. Und das funktioniert. Und was ihr insbesondere in diesem Bild seht, ist, dass diese Extension nur in der Lage sein sollte, auf Google.com zu laufen. Wir haben sie aber auf Bing.com aufgerufen. Funktioniert. Das ist nicht gut. Das sei eine totale Verletzung der Privatsphäre, denn die Nutzerinnen meinen an dieser Stelle, dass die Extension nur auf Google.com laufen darf. Tut sie aber nicht. Das haben wir reported zu Microsoft. Ich habe euch also geschrieben beim letzten Mal, dass ich lokale Pfeils mit Update laufen kann und ihr sagt, dass ihr das nicht fixen werdet. Jetzt kann ich ja was könntest du aufrufen. Okay, wir verstehen was du versuchst uns zu sagen. Kannst du auch einfach User-Cookies so alerten? Kannst du sowieso insbesondere stehlen? Okay, kann ich versuchen. Also versuchen wir einfach mal alert document.coge. Da wir jetzt so einen Host Access Permission Bypass haben, wie ich heute gerade vorgeführt habe, in Edge, können wir Facebook-Daten oder alles so was exfiltrieren. Jetzt nehmen wir also mal an. Wir fangen an bei Google Emails. Wir suchen, haben etwa eine geheime E-Mail und die spricht von einem Coupon $4000 Cashback auf Paper. Um diese Attacke zu demonstrieren, seht ihr benutze ich BrowserTab Update und das sucht sich jetzt eine E-Mail mit einer bestimmten ID und die schicken wir an leak.html. Und was macht leak.html? Das kopiert sich und mit diesem CurryString aufgerufen wird und schreibt es ins Dokument. Wenn wir also jetzt die extension auf mail.google.com öffnen, wird es diese Informationen stehlen. Dieses Proof-of-Konzept haben wir an Microsoft geschickt. Dasselbe auch wieder mit den lokalen Dateien. Das funktioniert nicht nur mit den falschen Domänen. Schauen wir nochmal, was mit lokalen Dateien passiert. Haben wir auch wieder reported. Erinnert euch also nochmal, wie war das damit, dass wir lokalen Dateien laden können? Das hat Microsoft nicht besonders interessiert und die Download-FBI ist ja nicht unterstützt. Jetzt haben wir auch noch JavaScript-Code-Ausführungen bei lokalen Dateien. Und wenn wir diese beiden Bugs jetzt verketten, dann sollten wir damit auch lokalen Dateien stehlen können. Was wir also tun, ist wie der BrowserTabs Update mit der Fire URL und hängen außerdem an der BrowserTabs Update, die eine JavaScript-URL anfragt. Was passiert jetzt? Bislang haben wir JavaScript-Ausführungen und sogar lokalen Dateien. Was passiert jetzt? Das nächste, was mir einfiel, ist privilegierte Seiten anzusehen, wie ich euch schon gezeigt habe, About Flags und About Compat und so. Also war ich relativ neu gerichtet, aufgerichtet, ob das auf den privilegierten Seiten auffunktionieren wird. Also schauen wir mal nach about.flags, versuchen JavaScript Alert auf about.flags. Zu meiner Überraschung hat das nicht funktioniert. Und ich war so überrascht, dass ich mir den Kopf gestellt habe, was ist denn hier falsch. Dann wollte ich rauskriegen, was ist falsch mit dieser Implementation. Vielleicht gibt es Fehler in der Konsole. Also habe ich in der Konsole geguckt, was ist da los. Und ihr seht, da gibt es keine passenden Fehler dafür. Wie ihr seht, also diese sensiblen Seiten in Edge Chrome Firefox. Das sollte keine JavaScript-Execution überhaupt zu sehen sein. Ja, das war's. Warum funktioniert also diese schwarze Markeen nicht auf den privilegierten Seiten? Selbst ohne CSP Failure. Vielleicht ist Edge ja doch clever. Haben wegen einen anderen Weg, about.flags zu laden. Das nächste, was mir eingefallen ist, ist das RES-Protokoll. Das ist etwa um Ressourcen zu laden von Modulen. Also etwa start about.flags, könnt ihr hier RES, doppelt.forward.flags, html.dll.forward.flags, html aufrufen. Und plötzlich funktioniert es. Auf diese Art haben wir jetzt JavaScript-Ausführbarkeit auf diesen privilegierten Seiten. Das ist ziemlich schlecht. Denn damit können wir jetzt den Adobe Flash Player und ausschalten. Und andere Dinge, die wir skriptiert haben, funktionieren hier halt jetzt auch. Wir nehmen also jetzt hier BrowserTabsUpdate, machen das off Ress HTML.dll.flags und machen jetzt unseren JavaScript-Uri-Call in BrowserTabsUpdate und aktivieren damit den Adobe Flash Player. Was ist jetzt das nächste? Ich wollte noch herauskriegen, ob wir noch mehr können. Dann habe ich jetzt weitergemacht mit dem Lesemodus von Edge. Das ist ein Feature in Edge, was eine Seite so rendert, dass sie einfach zu lesen ist. Das heizt Edge entfernt all den Code, der beim Lesen hinterlich sein könnte. Unnötigen Code wie JavaScript, iFrames und so fort. Man kann also wir erwarten jetzt besonders, dass wir damit keine Werbung kriegen. Und der Browser sorgt dafür, dass kein JavaScript ausgeführt wird in diesen Modus. Du kannst insbesondere können wir den Browser möglichst nicht mehr identifizieren nach Spezifikationen, wenn sie über die URL ausgehoben wurde von der Seite aus. Und man kann jede Webseite zwingen, so geladen zu werden, indem wir mit Read Stoppepunkt vor der URL starten. Weil der Reading Mod mit einem bestimmten CSP geschützt wurde, wurde damit diese JavaScript Execution geblockt. Das heißt, erst mal fühlte sich das safe an gegen JavaScript Execution für den Testfall. Ja, ich hatte das auch weiterhin for safe, ich habe das nicht reproduzieren können, darin was ausführen zu können. Stellen wir uns vor, wo eine Erweiterung, andere Erweiterung ausschalten könnte. Wir sind jetzt auf der internen Seite von Adblock Plus. Und wenn wir jetzt versuchen, unsere Böse Erweiterung zu laden, haben wir weiterhin diese CSP-Fehler. Also ja, auch safe. Das heißt, die Haus-Permission-Umgehung funktioniert also in diesem Fall nicht, wenn es nicht Inline-Scripts zu lässt. Aber was haben wir direkt versuchen, mit der Execution-Script-API zu arbeiten? Wir nehmen also an, wir sind auf einer Seite, wo die CSP ordentlich implementiert ist, und dann haben wir die Haus-Permission-Erlaubnisse an der selben Stelle. Wir benutzen also hier BrowserTabs Execute-Script mit dem PRP-Script von oben. Mit Java-Script aller Document Domain. Die Erweiterung mit seinem CSP funktioniert. Sie werden alles Mögliche an JavaScript zulassen, außer sie versuchen, auf den DOM wesentliche Veränderungen zu machen. In diesem Fall nehmen wir an, wir sind auf einer Seite. Die gute ist, dass wir auf einer Seite die gute CSP hat, etwa so. Und jetzt versuchen wir aber den DOM dieser bestimmten Seite zu verändern. Entweder können wir DocumentRide benutzen oder vielleicht Document.body.nhr.html und was wir vielleicht noch tun können, ist ein Element generieren und darin schreiben. All diese Wege, den DOM-Tree, den DOM-Baum auf der Seite zu modifizieren, wurde meist nicht erlaubt. Für die Erweiterung ist das allerdings irrelevant. Auf der Seite zu modifizieren, wurde meist nicht erlaubt. Für die Erweiterung ist das allerdings irrelevant. Ob wir den DOM ändern oder nicht auf einer solchen Seite. Viele dieser APIs sind noch nicht wirklich unterstützt. Und dann sie werden noch weiterentwickelt. Edge ist jetzt im Grunde auch Chrome basiert. Das heißt, es ist unklar, ob sie diese APIs weiter unterstützen werden. Aber ActiveTabs ist ein sehr, sehr wichtiges Problem. ActiveTabs ist eine der interessantesten Erlaubnisse, weil sie euch nicht möglichst beliebiges Jahr was gibt auf der aktuellen Domain auszuführen. Das heißt, vielleicht können wir viele diese Angriffe auf die ActiveTab-API oder Erlaubnis portieren. Sie haben das in März 2019 mit der höchstmöglichen Bug-Belohnung gefixt und die CVE-Nummer ist CVE 2019 0678. Danke für diesen interessanten Vortrag. Wenn ihr Fragen zum Vortrag habt, dann haben wir 3 Mikrofone. Wenn ihr also Fragen habt, dann kommt bitte vor zu den Mikrofonen und wir beginnen mit Mikrofonnummer 3. Danke für diesen interessanten Vortrag. Ich habe eine Frage. Ist dieser Bug oder ist die API auch relevant für den neuen Edge-Browser, der im Januar kommt, der auf dem Chromium-Brander basiert? Die neue Version läuft auf Chrome, aber sie werden dieses API nicht unterstützen. Sie werden eine andere Methode dafür verwenden. Beantwortet das deine Frage? Ich habe mal eine zweite, wenn das in Ordnung ist. Die zweite Frage ist, du hast versucht, diese Seiten über das ESP-Protokoll zu öffnen, aber die Funktionalität dieser Seiten wird die auch von Edge gehandhabt und nicht vom About-Protokoll? Ja, es funktioniert. Noch Fragen aus dem Publikum oder aus dem Internet? Dann noch einmal Applaus für Nikhil für einen großartigen Vortrag.