Frage

Wir haben einen Coverity Fehler für diese Codezeile:

snprintf( tempStr, size, testStrings[testID], A2DtoV(testResults[testID].value),
A2DtoV(testResults[testID].min),A2DtoV(testResults[testID].max));

Der Fehler sagt:

non_const_printf_format_string: "format string is not a string literal, 
potential security vulnerability if user controlled"

Ich änderte testStrings zu einem const, aber das hat nichts tun:

static const char *testStrings[] = {"1", ... etc};

Alle Ideen, was dieser Fehler wirklich sagen?

War es hilfreich?

Lösung

Der Code ist in Ordnung.

Das Problem ist, dass, wenn Sie eine Zeichenfolge übergeben, die Benutzer als Printf gesteuert wird, Sicherheitslücken entstehen können.

Zum Beispiel printf(userName);

Dabei steht Benutzername durch den Benutzer zugeführt wird, kann ein Benutzer „% s“, übergeben und erhalten Sie Ihre Funktion auf dem Stapel an einer beliebigen Adresse zu starten Zugriff auf die Daten, die zu einem Absturz führen konnte. printf wird versuchen, aus dem Stapel zusätzliche Parameter Pop, was zu einem Stapel Korruption. Denial-of-Service-Attacke wie dies ist wahrscheinlich der beste Fall, können Informationen, indem sie printf offen gelegt werden Werte auf dem Stapel auskippen und es gibt sogar Möglichkeiten printf Stil Funktionen zu ändern, die Absenderadresse auf dem Stack zu erhalten.

Da die Saiten werden nicht vom Benutzer gesteuert wird, ist es sicher, diese Meldung zu ignorieren. Die typische Lösung ist das printf Beispiel ersetzen ich mit printf("%s", userName); gab, die in Ihrem Fall erscheinen würde helfen nicht, weil die const strings Formatstrings zu enthalten scheinen.

Wikipedia hat mehr auf Format-String-Schwachstellen hier: http://en.wikipedia.org/wiki/Format_string_vulnerabilities

Andere Tipps

Idee ist, kann dieser Wert von testStrings[testID] irgendwie geändert werden, um zusätzliche Formatangaben enthalten.

Da snprintf() hat keine Möglichkeit, zu prüfen, ob Anzahl der Parameter die Anzahl des Formats entspricht Planer wird es nur die nächste Adresse vom Stapel nimmt als Wert für die nächste Formatbezeichner und seltsame Dinge kann dann passieren zu verwenden.

Es ist bekannt, wie Format-String-Angriff .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top