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.

