Use-after-Free

Auch bekannt als:UAF · Nutzung nach Freigabe

Use-after-Free: Zugriff auf Speicher, der bereits freigegeben und möglicherweise neu belegt wurde. Die Schwachstellenklasse gehört zu den häufigsten Formen der SpeicherbeschädigungMemory CorruptionUnbeabsichtigte oder gezielte Veränderung von Speicherstrukturen mit Sicherheitsfolgen. in C- und C++-Programmen.

Funktionsweise und Einordnung

Nach einem free() bleibt der Zeiger auf den Speicherbereich oft bestehen, obwohl der Allokator den Block bereits zur Wiederverwendung freigegeben hat. Greift das Programm später erneut darüber zu, liest oder schreibt es in Speicher, der inzwischen einem anderen Objekt gehört. Der Angreifer bringt gezielt eine eigene Struktur an diese Stelle — bei modernen Allokatoren etwa über den tcache — und kontrolliert damit Felder, die das Programm als vertrauenswürdig behandelt. Zeigt eines dieser Felder auf eine Funktion, wird aus dem Speicherfehler eine Codeausführung.

Bedeutung in der Praxis

Use-after-Free entsteht selten durch eine einzelne falsche Zeile, sondern durch inkonsistente Verantwortlichkeiten für Objektlebenszyklen, oft verschärft durch Nebenläufigkeit. Wirksame Gegenmaßnahmen setzen an der Ursache an: Zeiger nach der Freigabe konsequent nullen, Ownership-Modelle wie in Rust, gehärtete Allokatoren mit verzögerter Wiederverwendung und Speicher-Sanitizer im Test. Für die Bewertung ist entscheidend, ob der Angreifer die Belegung des freigegebenen Blocks zuverlässig beeinflussen kann.

Verwandte Begriffe

  • Memory CorruptionMemory CorruptionUnbeabsichtigte oder gezielte Veränderung von Speicherstrukturen mit Sicherheitsfolgen.: Unbeabsichtigte oder gezielte Veränderung von Speicherstrukturen mit Sicherheitsfolgen.
  • Buffer OverflowBuffer OverflowSchreiben über die Grenze eines Speicherpuffers hinaus, wodurch benachbarte Daten überschrieben werden.: Schreiben über die Grenze eines Speicherpuffers hinaus, wodurch benachbarte Daten überschrieben werden.
  • Binary ExploitationBinary ExploitationAusnutzung von Speicher- oder Logikfehlern in kompilierten Anwendungen.: Ausnutzung von Speicher- oder Logikfehlern in kompilierten Anwendungen.
  • Secure CodingSecure CodingProgrammierpraktiken zur Vermeidung typischer Schwachstellen und Fehlkonfigurationen.: Programmierpraktiken zur Vermeidung typischer Schwachstellen und Fehlkonfigurationen.