TIFF-Bibliothek: Ausführen von Befehlen möglich

Eine Sicherheitslücke in der TIFF-Bibliothek hat zur Folge, dass ein entfernter Angreifer Befehle mit den Rechten des Anwenders ausführen kann. Eine Attacke ist durch geschickt konstruierte TIFF-Bilddateien möglich.

Die Schwachstelle befindet sich in der Datei “libtiff/tiff_getimage.c”. Hier tritt ein Integer Overflow beim Berechnen einer Pufferlänge auf. Dies hat zur Folge, dass ein entfernter Angreifer Buffer-Overflow-Attacken ausführen kann. Der Programmierfehler befindet sich in der Funktion “gtTileSeparate()”:

static int gtTileSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h)
{ TIFF* tif = img->tif; tileSeparateRoutine put = img->put.separate; uint32 col, row, y, rowstoread; uint32 pos; uint32 tw, th; unsigned char* buf; unsigned char* p0; unsigned char* p1; unsigned char* p2; unsigned char* pa; tsize_t tilesize; int32 fromskew, toskew; int alpha = img->alpha; uint32 nrow; int ret = 1, flip; tilesize = TIFFTileSize(tif); buf = (unsigned char*) _TIFFmalloc((alpha?4:3)*tilesize); if (buf == 0) { TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Nof space for tile buffer"); return (0); } ...

Die Funktion “_TIFFmalloc()” erwartet ein Argument des Typs “tsize_t”, was als zeichenbehafteter int32-Wert definiert ist. Dadurch kann es bei der Multiplikation von “tilesize” mit 3 oder 4 zu einem Overflow kommen. Dies führt dazu, dass der von “_TIFFmalloc()” allozierte Speicher zu klein ist, und damit ein Heap-Overflow auftreten kann.

Ein Angreifer hat direkte Kontrolle über “tilesize”, da die Funktion “TIFFTileSize()” diesen Wert direkt aus der TIFF-Datei bezieht. Mit Hilfe einer geschickt präparierten TIFF-Datei ist es somit möglich, Befehle mit den Rechten des Anwenders der Bibliothek durchzuführen. Außerdem sind über die Schwachstelle auch Denial-of-Service-Attacken möglich.

Betroffen ist die Version 3.9.5.

Nach oben