Ghostscript: PS- und PDF-Dateien führen ungewollte Befehle aus

Eine Sicherheitslücke in Ghostscript hat zur Folge, dass ein entfernter Angreifer Befehle mit den Rechten des Anwenders ausführen kann.

Die Attacke ist durch speziell präparierte Postscript- oder PDF-Dateien mit eingebundenen Bildern möglich. Beim Laden werden die vom Angreifer gewünschten Befehle ausgeführt.

Der eigentliche Programmierfehler befindet sich in der International Color Consortium (ICC) Format-Bibliothek. Hier hat sich ein Integer Overflow eingeschlichen, der im weiteren Programmablauf zu einem Heap Overflow führen kann.

Die Schwachstelle befindet sich in der Funktion “icmLut_allocate()” in der Quelltextdatei “icc.c”. Diese bekommt als Argument “icmbase *pp” übergeben.

static int icmLut_allocate(icmBase *pp)

Dieser pp-Zeiger wird dann via

icmLut *p = (icmLut *)pp;

auf “icmLut*” gecastet. Anschließend finden sich folgende Zeilen in der Funktion:

i = p->inputChan-1;
p->dinc[i--] = p->outputChan;

Zu diesem Zeitpunkt ist schon sichergestellt, dass “p->inputChan” nicht zu groß ist. Dies ist notwendig, da “i” im Weiteren als Index in einem auf dem Heap alloziertes Array (“p->dinc)” verwendet wird. Andernfalls könnte es hier schon zu einem Heap Overflow kommen.

Allerdings wird nicht geprüft, dass “p->inputChan” größer als Null ist. Und genau hier liegt das Problem. Die Variable “i” ist als “unsigned int” deklariert, wodurch “p->inputChan = 0” via Integer Overflow einen großen positiven Wert für “i” nach sich ziehen kann. Dieser Overflow hat im Weiteren einen Heap Overflow zur Folge, da der “i”-Index für den folgenden Array-Zugriff verwendet wird:

p->dinc[i--] = p->outputChan;

Damit tritt ein Overflow beim Zugriff auf das “p->dinc Array auf”. Das kann der entfernte Angreifer ausnutzen, um die gewünschten Befehle auszuführen oder die Applikation einfach zum Absturz zu bringen.

Betroffen ist die Version 9.06.

Nach oben