GEGL: Gimp-Bibliothek lässt entfernte Angreifer Befehle ausführen

GEGL ist eine Bibliothek, die vor allem von Bildverarbeitungsprogrammen wie Gimp verwendet wird, um Bilder mit großen Bit-Tiefen zu unterstützen. Eine kürzlich entdeckte Sicherheitslücke in GEGL hat zur Folge, dass ein entfernter Angreifer Befehle mit den Rechten des Anwenders ausführen kann. Die Attacke basiert auf präparierten Bilddateien, die beim Bearbeiten die vom Angreifer gewünschten Befehle ausführen.

Bei der Schwachstelle handelt es sich um einen Heap-Overflow-Fehler in den Routinen zum Verarbeiten von Portable-Pixmap-Dateien (PPM). Die Hauptschwachstelle befindet sich in der Funktion “ppm_load_read_header()” in der Quelltext-Datei “operations/external/ppm-load.c”. Dort wird

img->numsamples = img->width * img->height * CHANNEL_COUNT;

berechnet, und später kommt “img->numsamples” zuer Verwendung, um Speicher zu allozieren. Dabei gibt “img->numsamples” die Größe des zu allozierenden Speichers an:

img.data = (guchar*) g_malloc (img.numsamples * img.bpc);

Bei “width”, “height” und “numsamples” handelt es sich um Integer-Variablen. Ein Angreifer kann dadurch sehr leicht einen Integer Overflow einbauen und damit via “g_malloc()” einen Heap Overflow erzeugen, um Befehle auszuführen. Hierzu muss er lediglich eine PPM-Datei mit entsprechenden Einträgen im Header erzeugen.

Die Sicherheitslücke wurde nun durch verschiedene If-Abfragen wie

if (!img->width || !img->height || G_MAXSIZE / img->width / img->height / CHANNEL_COUNT < img->bpc)

korrigiert. Daneben haben die Entwickler Variablen wie “width” und “height” in “operations/external/ppm-load.c” vom Datentyp Integer auf Long umgestellt, um derartigen Overflows vorzubeugen.

Betroffen ist die Version 0.2.0.

Nach oben