Formatstring-Angriff

Der Begriff Formatstring-Angriff beschreibt das Ausnutzen einer Sicherheitslücke, welche im Jahr 1999 von Przemysław Frasunek und tf8 entdeckt wurde.

Der erste Exploit, der diese Technik ausnutzte, erlaubte es einem Angreifer, die Kontrolle über wu-ftpd 2.6.0 zu übernehmen. Formatstring-Attacken können genutzt werden, um ein Programm zum Absturz zu bringen oder fremden Code auszuführen.

Das Problem rührt von der Benutzung ungefilterter Benutzereingaben in bestimmten C-Funktionen her, wie printf(), welche für die Ausgabe formatierten Textes zuständig sind. Ein bösartiger Benutzer könnte zum Beispiel die Formatierungstoken %s und %x benutzen, um sich Daten vom Stack ausgeben zu lassen. Mit dem %n-Token lässt sich die Anzahl der ausgegebenen Zeichen (als Integer) an eine beliebige Stelle im Speicher schreiben.

Diese Schwachstelle ist weit verbreitet, da man Formatierungsfehler früher für harmlos gehalten hat. Am häufigsten tritt sie auf, wenn ein Programm Eingaben des Benutzers wieder ausgeben soll und der Programmierer printf(buffer) anstelle von printf("%s", buffer) schreibt. Bei der ersten Version wird buffer als ein String mit Formatierungstoken interpretiert. Bei der zweiten Version hingegen wird einfach der Eingabestring ausgegeben.

Diese Art von Fehlern kann nur auftreten, da Unterprogrammaufrufe in C nicht typsicher sind und eine variable Anzahl von Parametern zugelassen wird, ohne dass eine Überprüfung erfolgt, ob Anzahl und Typ der gelesenen Parameter denen der übergebenen Parameter entsprechen.