HTML Parser State Machines in Chromium

Allgemein

Betreuer: Dominik Noß

Weitere Details:

Beschreibung

HTML Parser in Web Browsern erhalten als Eingabe einen Bytestream und generieren daraus einen DOM Graphen. Dieses Vorgehen wird in der HTML Spezifikation von WHATWG [1] schon recht genau beschrieben.

Implementationen dieser Spezifikation, wie in Chromium [2], können Abweichungen enthalten, sodass das Parsing sich nicht nur zwischen Browsern, sondern sogar schon innerhalb eines einzigen Browsers unterscheidet, je nachdem welcher Modus gewählt ist (z.B. Setzen via innerHTML vs statisches HTML vs DOMParser).

Das kann man ausnutzen, um XSS-Payloads zu bauen, welche in den von HTML Sanitizern benutzten Parsern unentdeckt bleiben, und erst im Ziel-Parser aktivieren.

Es wäre sehr hilfreich, die implementierte State Machine in Form eines Netzwerkgraphen extrahieren zu können, um sie anschließend miteinander vergleichen zu können, und eventuelle Schwachstellen zu identifizeren. Dazu soll der Quellcode von Chromium so verändert werden, dass der interne Speicherstatus des Parsers als Debug-Ausgabe ausgegeben wird, um diese dann in ein Framework für State Machine Inference, LearnLib, zu füttern.

Zu beantwortende Forschungsfrage dieser Abschlussarbeit:

  1. Kann die State Machine mittels State Machine inference gelernt werden?
  2. Wie genau sehen die im Chromium Browser implementierten State Machines aus?
  3. Wie unterscheiden sich die State Machines?

Bei Interesse schreibe bitte per Email an dominik.noss@rub.de

Voraussetzungen

Du kannst genügend C++ programmieren, um bestehenden Code zu verstehen und Debug-Ausgaben einzubauen. Du weißt, wie formale State Machines funktionieren. Zustände, Übergänge, Eingaben, Ausgaben etc. Du bist vertraut mit gerichteten Gaphen und weißt was Pfade, parallele Kanten, Kreise und Schleifen sind.