Open Source im professionellen Einsatz

Imlib-Bibliothek: Integer-Overflow lässt Angreifer Befehle ausführen

Die Imlib-Bibliothek stellt zahlreiche Funktionen zum Bearbeiten von Bildern zur Verfügung. Ein nun entdeckter Fehler erlaubt es einem entfernten Angreifer Befehle mit den Rechten der Anwendung auszuführen. Anfällig hierfür sind beliebige mit der Imlib-Bibliothek geschriebene Programme. Ursache der Schwachstelle ist ein Programmierfehler, der zu einem Integer-Overflow-Fehler beim Laden von Bilddaten führt. Ein Angreifer kann dieses Problem ausnutzen, indem er dem Anwender eine entsprechend konstruierte Bilddatei übermittelt und dieser die Datei dann versucht zu laden.

Der Programmierfehler in der Bibliothek besteht darin, dass an zahlreichen Stellen Speicher für Bilder in folgender Form alloziert wird:

malloc(w * h * sizeof(DATA32)); 

Auf 32-Bit Systemen führt dies dann zu einem Integer Overflow und einer falschen Allokation von Speicher auf dem Heap. 64-Bit Systeme sind von diesem Overflow allerdings nicht betroffen. Da diese Form der Speicherallokation an zahlreichen Stellen im Code auftritt, haben die Entwickler als Patch einfach ein neues Makro definiert:

define IMAGE_DIMENSIONS_OK(w, h) ( ((w) > 0) && ((h) > 0) && ((w) < X_MAX_DIM) && ((h) < X_MAX_DIM) ) 

Wie der Name schon sagt prüft dieses Makro, ob die Dimensionen des Bildes (Höhe h und Breite w) so beschaffen sind, dass beide nicht negativ sind und auch kleiner als X_MAX_DIM. Der zweite Fall stellt sicher, dass bei der Allokation unter 32-Bit Systemen keine Probleme mehr auftreten können. Hierzu wurde X_MAX_DIM als 46340 definiert. Dies stellt sich, dass das Produkt aus Höhe und Breite , also die Anzahl an Pixeln, stets kleiner als 2^31 ist. Damit kann dann kein Overflow mehr auftreten. 

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.