Grafikprogramm Gimp lässt sich mit manipulierten Dateien angreifen

Gimp (GNU Image Manipulation Program) ist ein populäres und ausgereiftes Bildverarbeitungsprogramm unter GPL-Lizenz. Mehrere Sicherheitslücken in der Anwendung ermöglichen es einem entfernten Angreifer, Befehle mit den Rechten des Anwenders auszuführen.

Die meisten dieser Schwachstellen wurde schon vor geraumer Zeit in Gimp korrigiert. Trotzdem haben einige Distributionen wie Red Hat erst letzte Woche ein entsprechendes Update und Advisory herausgegeben. Darum hat auch das DFN-CERT darauf mit einem Advisory reagiert.

Ursache der Schwachstellen sind mehrere Integer- und Buffer-Overflows, die beim Verarbeiten von PCX- und BMP-Bilddateien auftreten. Die Programmierfehler treten bei der Speicherallokation via “g_new()” auf. Diese Funktion wird von GLib bereitgestellt, einer in C geschriebenen Bibliothek, die zahlreiche grundlegende Datenstrukturen (wie Hashtabellen und N-äre Bäume) und Methoden (wie Zeichenketten-Funktionen und Threading) einfach zugänglich macht. Projekte wie GTK+ und GStreamer gehören zu den Anwendern der Bibliothek.

In der Funktion “load_image()” der Datei “file-pcx.c” findet man beispielsweise folgende fehlerhafte Code-Zeile:

dest = g_new (guchar, width * height);

Hier soll via “g_new()” Speicher in der Größe von (width*height)*(Größe von guchar) allokiert werden. “guchar” ist hierbei ein von der GLib bereitgestellter Datentyp. “width” und “height” sind hier als gint32 definiert, also als 32 Bit breite vorzeichenbehaftete, ganzzahlige Werte (-2,147,483,648 bis 2,147,483,647).

Was passiert nun, wenn der Angreifer eine PCX-Datei mit width*height>2,147,483,647 konstruiert? Dann kommt es zu einem Integer-Overflow, wie er in einem älteren Beitrag des Insecurity Bulletin erklärt ist. Dies hat zur Folge, dass die falsche Speichergröße für “dest” allokiert wird. Anschließend lädt Gimp aber die Bilddatei in “dest”, und da “dest” mit der falschen Speichergröße allokiert wurde, kann es hier zu einem Heap Overflow kommen. Das Problem lässt sich einfach mit einem Cast via

dest = g_new (guchar, ((gsize) width) * height);

korrigieren.

Um Befehle mittels dieser Schwachstelle auszuführen, muss der Angreifer eine geschickt konstruierte PCX-Datei an sein Opfer schicken. Auch die BMP-Datei-Attacke beruht auf einer speziell gebauten Datei.

Gimp enthält weiter außerdem einen Heap Buffer Overflow im Paint-Shop-Pro-Plugin und Stack Buffer Overflows in den Bildfiltern Lightning, Sphere Designer und Gfig. Diese Sicherheitslücken erlauben es einem entfernten Angreifer ebenfalls, Befehle mit den Rechten des Anwenders auszuführen.

Nach oben