Processing of Untrusted LaTeX Documents

#/Informatik & Security #IT Security (BA)

Im Rahmen des Projekts wurde eine Online-Lösung zur sicheren, automatisierten Kompilierung von nicht vertrauenswürdigen LaTeX-Dokumenten erarbeitet.

  • Projektleitung:
    Dipl.-Ing. Österreicher Gabor, BSc
  • Externe MitarbeiterInnen:
    Stefan Viehböck, MSc (SEC Consult Unternehmensberatung GmbH)
    Sebastian Erhart
    Manuela Gastinger
    Gianluca Raberger
  • PartnerInnen:
    SEC Consult Unternehmensberatung GmbH, https://www.sec-consult.com/
  • Weblinks:
    https://github.com/gianluca311/texsec
  • Laufzeit:
    01.02.201731.05.2017
  • Projektstatus:
    abgeschlossen
Ablauf eines Kompiliervorgangs von LaTex-Dokumenten

LaTeX bzw. TeX ist eine mächtige Sprache, mit der Dokumente „gesetzt“ werden können. TeX-Makros ermöglichen nicht nur Einfluss auf die Formatierung zu nehmen, sondern z. B. auch externe Dateien einzulesen bzw. solche auch zu schreiben. Diese Funktionalität kann missbraucht werden, um Angriffe durchzuführen.

Ziel war es, Recherche, Evaluierung und Dokumentation bestehender Angriffsmöglichkeiten und Abwehrmaßnahmen durchzuführen. Des Weiteren sollte ein Proof-Of-Concept (PoC) eines Online-Dienstes erstellt werden, der LaTeX-Dokumente als „Untrusted Input“ entgegennimmt und gerenderte Dokumente im PDF-Format retourniert.

Von den Studierenden wurde ein Konzept zur Realisierung und ein PoC für die sichere Kompilierung von LaTeX-Dokumenten erstellt. Dabei wurde auf „Docker“ bzw. containerbasierte Technologien zurückgegriffen, um ein möglichst abgeschottetes Umfeld zur Kompilierung der Dokumente bereitzustellen. Dabei ist die erstellte Applikation in drei voneinander unabhängige Komponenten aufgeteilt:

  • Web Frontend
  • REST-API
  • Compilation Daemon

REST-API und Compilation Daemon wurden in Go entwickelt, um bestmöglich mit Docker kommunizieren zu können. Das Web Frontend wurde in HTML5 und JavaScript realisiert.

Der geplante Ablauf eines Kompiliervorgangs sieht wie folgt aus:

  • Upload eines LaTeX-Dokuments über das Web-Frontend zur REST API
  • Formale Validierungen durch die REST API
  • Übergabe der Datei an den Compilation Daemon nach erfolgreicher Validierung
  • Dynamisches Erzeugen eines neuen Docker-Containers durch den Compilation Daemon
  • Kompilieren des LaTeX-Dokuments innerhalb des Containers
  • Übermittlung des Kompilats an den Compilation Daemon
  • Zerstörung des Docker Containers durch den Compilation Daemon
  • Bereitstellen des Kompilats über das Web-Frontend