Eine Sicherheitslücke in der Bibliothek Libxfont hat zur Folge, dass ein entfernter Angreifer Befehle mit den Rechten des Anwenders ausführen kann. Schlimmstenfalls ist dies der Superuser des Systems, womit ein Angreifer Root-Rechte erlangen kann.
Die Attacke ist mit Hilfe einer speziell präparierten BDF-Font-Datei (Bitmap Distribution Format) möglich. Baut ein Angreifer diese geeignet zusammen, so kann er damit einen Stack Overflow im Programmcode auslösen.
Der Programmierfehler befindet sich in der Quelltextdatei “lib/libXfont/src/bitmap/bdfread.c”. Dort enthält die Funktion “bdfReadCharacters()” folgende If-Abfrage:
if (sscanf((char *) line, "STARTCHAR %s", charName) != 1)
Dieser Code liest die Variable “line” via “sscanf()” basierend auf dem Format-String “STARTCHAR %s” aus und speichert das Resultat in der Variablen “charName”. Dabei handelt es sich um eine zuvor auf dem Stack allozierte Variable:
char charName[100];
Ein Angreifer kann nun dafür sorgen, dass “charName” mit mehr als 99 Zeichen gefüllt wird, wodurch diese Variable auf dem Stack überläuft. Obwohl diese Schwachstelle weitreichende Folgen haben kann, ist sie sehr leicht zu korrigieren. Es muss lediglich dafür gesorgt werden, dass maximal 99 Zeichen in “charName” kopiert werden. Dies lässt sich leicht durch
if (sscanf((char *) line, "STARTCHAR %99s", charName) != 1)
erreichen. Damit ist die Lücke geschlossen und die Attacke nicht mehr möglich.
Betroffen von diesem Problem sind Libxfont-Versionen älter als 1.4.7.

