Der Ghostscript Exploit, der in andere Anwendungen eskaliert

Vor einigen Tagen hatte ich ja was zum Kernel Bug geschrieben, nämlich, daß ich mir mehr Sorgen mache, daß eins der Desktopprogramme geknackt wird. Jetzt ist es bei Ghostscript soweit.

Der Ghostscript Exploit, der in andere Anwendungen eskaliert

Ghostscript < 10.1.02  hat eine Schwachstelle, die das Ausführen von Code erlaubt. Das an sich ist schon schlimm, wenn man dann erfährt, daß das bei den Maintainer untergegangen ist 🙁

Schlimmer ist aber, daß die Lücke in andere Anwendungen wie InkScape, LibreOffice und Gimp eskaliert, dort also auch funktioniert. Möglich macht dies das Äquivalent der größten Container-Sorge überhaupt: Diese Anwendungen halten sich eine selbst gepatchte Version von Ghostscript in der Codebasis und naja, in der ist der Bug auch drin.

Das ist vergleichbar mit einer Sammlung von Docker Containern,Snaps & Flatpaks, welche alle die gleiche ausnutzbare libPNG drin haben und jetzt alle geupdated werden müssen, wo ja eigentlich nur eine Komponente das Update wirklich bräuchte: Ghostscript. Was zeigt das: Dumme Entscheidungen brauchen kein Containermodell 😉

Anstatt einer Komponente, müssen jetzt ein Haufen unübersehbarer Anwendungen aktualisiert werden, wozu man erstmal rausfinden muß, wo das überall drin ist. Das muß man erst mal schaffen. Log4J lässt so derbe grüßen, daß heute wohl Murmeltiertag ist.

Da zu allem Überfluss ein POC-Exploit bekannt ist, werden echte Exploits nicht lange auf sich warten lassen.

Die Situation auf Debian ist besser als die von Fedora, weil Debian immerhin das erste GS Update ausgeschickt hat, bei Fedora aber nichts am Horizont ist. Dagegen habe ich mal was gemailt…

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36664

https://www.kroll.com/en/insights/publications/cyber/ghostscript-cve-2023-36664-remote-code-execution-vulnerability

 

PDF Dokumente auf dem Server erzeugen

Es gibt viele Wege auf einem (Web)-Server ein PDF Dokument zu erstellen, eine, die besondere Vorteile hat, möchte ich Euch heute vorstellen.

PDF Dokumente auf dem Server erzeugen

Wenn man „normalerweise“ Dokumente auf dem Server erzeugen will, so etwas wie Rechnungen, Bestellbestätigungen usw. muß man eine PDF-Lib nehmen. Mit deren Hilfe baut ein Programmierer das Dokument aus Einzelteilen zusammen, sprich, jede einzelne Linie, jeden Text und jede Schriftart. Dafür braucht er ewig lang und das bedeutet, es wird teuer.

Da Webseiten von Webentwicklern und Webdesignern gestaltet werden, wäre es doch viel besser, wenn diese Leute die Vorlagen für die Rechnungen in HTML, CSS und Javascript bauen könnten und man nur noch „die Werte“ einsetzt, oder? Genau das geht mit wkhtmltopdf und einigen anderen derartigen Programmen.

WKHTMLTOPDF

wkhtmltopdf hat den Vorteil, daß es in einer Statischen Form benutzt werden kann, ohne das man einen X11-VirtualFramebuffer braucht. Das macht den Einsatz auch auf gemieteten Webaccounts einfach.

Webdesigner können sich via HTML und CSS derart in dem Dokument austoben, wie es ein Programmierer mit der Lib fast nicht könnte und die Sache hat einen Vorteil: Man kann sich die erzeugte HTML Datei im Browser ansehen und bekommt so eine Vorschau ohne das man das PDF wirklich erzeugen und anzeigen müßte. Natürlich gibt es Stolpersteine und kleine Abweichungen vom Wunschzustand, das bleibt nicht aus. So kann man z.B. recht schlecht Seitenzahlen einfügen, außer man erzeugt die Seiten einzeln, bevor Sie ins PDF umgewandelt werden.

Beispiel:

wkhtmltopdf –print-media-type datei1.html datei2.html datei.pdf

–print-media-type gibt hier an, daß die print.css benutzt werden soll. So kann man in der Vorlage CSS fürs Web und für das PDF unterbringen. Dies erlaubt auch den einfachen Einsatz des Templates auf der Seite selbst 😉

Da wkhtmltopdf auch Javascript unterstützt, können auch dynamische PDFs erzeugt werden, die abhängig vom benutzergewählten Inhalt andere Darstellungen haben, ohne das man das großartig in der Webanwendung, die das PDF erzeugt, implementieren müßte. Das hat zur Folge, daß man bei einer geschickten Wahl des Dokumentenaufbaus, nichts an dem z.b. PHP Script machen muß, um neue Inhalte einzubauen.

Im konkreten Fall hatten wir eine SPA (Single Page Application ) gebaut, die dynamisch neue Formularinhalte hinzufügt, und damit hochgradig veränderliche Inhalte verarbeiten mußte. Das ist im PHP dann meistens die Hölle, das wieder zu sortieren, aber in unserem Fall konnten wir leicht die strukturelle Form in ein mehrseitiges PDF-Dokument überführen, ohne das das PHP Script wegen der Komplexität fehleranfällig wird oder etwas über die einzelnen Formularfelder wissen müßte, was über Basisinformationen wie Namen und Typen hinausgeht. Es lohnt sich immer eine gute Idee mal in der Praxis auszuprobieren 😉

Ghostscript

Meine Werbeagentur und ich haben diese Art der PDF Erzeugung neulich für ein Projekt benutzt, bei dem auch noch Bedingungen, für die es bereits fertige PDFs gab, in das finale Dokument eingefügt werden mußten. Dies kann man leicht mit Ghostscript erledigen, indem die einzelnen PDFs zu einem einzigen PDF verbunden werden:

gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=final.pdf datei.pdf bedingung1.pdf bedingung2.pdf

Natürlich könnte man die Bedingungen auch gleich als HTML Dokument in das vorher erzeugte PDF einbringen, aber in der Realität kommen solche Dokumente aus irgendwelchen Rechtsabteilungen und die können kein HTML oder CSS, sondern gerade einmal Word. Daher ist es meistens nötig, das in zwei Schritten zu realisieren.