Was bedeutet Double free?
Der Double-free-Fehler gehört in Softwareprogrammen zu den häufigsten Arbeitsspeicherfehlern. Der Fehler wird durch die zweifache Freigabe des gleichen Speicherbereichs verursacht, indem die Methode free() zwei Mal hintereinander aufgerufen wird.
Wie sieht ein Beispiel für die Double Free Schwachstelle aus?
Die Schwachstelle wird durch die zweimalige Freigabe desselben Speicherbereichs ausgelöst. Das folgende Beispiel zeigt die doppelte Freigabe des Pointers „x“.
~
char* x = (char*)malloc(20);
…
if(y)
{
free(x); //erste Freigabe
}
free (x); //zweite Freigabe
~
In der Folge zeigen mehrere Zeiger auf denselben freien Speicherbereich.
Welche Gefahren gehen von der Schwachstelle aus?
Durch den zweifachen Aufruf wird die Speicherverwaltung des Programms gestört und in der Folge können Angreifer Werte in die Speicherbereiche schreiben. Daraufhin kann das Programm abstürzen oder gar den Code des Angreifers ausführen. So kann sich ein Cyberkrimineller zum Beispiel erhöhte Zugangsrechte verschaffen und Daten stehlen, manipulieren oder löschen.
Wie lässt sich der Fehler vermeiden?
Ein Weg für Programmierer zur Vermeidung des Double-free-Fehlers ist die Zuweisung von „null“, wie im folgenden Beispiel:
~
char* x = (char*)malloc(20);
…
if(y)
{
free(x); //erste Freigabe
x = NULL;
}
free (x); //zweite Freigabe
~
Open-Source Werkzeuge, wie der GNU Project Debugger und Valgrind, helfen Entwicklern bei der Analyse ihres Codes und Vermeidung des Fehlers.