Definition
Ein Fehler, der auftritt, wenn Code auf Speicher (oder eine andere Ressource) zugreift, nachdem dieser deallokiert/freed wurde, was zu undefiniertem Verhalten, Datenkorruption, Abstürzen oder Sicherheitslücken führt.
Prinzip
Prinzip
Use‑after‑free wird durch 'dangling references' verursacht: Ownership‑ oder Lifetime‑Verträge werden verletzt, sodass ein Pointer/Referenz das Objekt, auf das er zeigt, überlebt. In nicht‑memory‑safe Sprachen ergibt das undefinierte Semantik; in verwalteten Laufzeiten tritt es auf, wenn Objekte wiederbelebt werden oder native Speicher falsch gehandhabt wird.
Demonstration
Demonstration
Eine Funktion freed ein Objekt und kehrt zurück; eine spätere Routine hält noch den Pointer und schreibt darauf. Je nach Allocator‑Verhalten kann der Speicher für ein anderes Objekt wiederverwendet worden sein, was zu stiller Korruption oder einem Absturz beim Zugriff führt.
Fehlanwendung
Fehlanwendung
Use‑after‑free mit Double‑Free, NULL‑Dereferenz oder veralteten gecachten Werten zu verwechseln; oder anzunehmen, es führe nur zu Abstürzen, obwohl es subtile Korruptionen oder remote code execution ermöglichen kann.
Konsequenz
Konsequenz
Die richtige Erkennung führt zu Gegenmaßnahmen: Ownership‑Modelle, Use‑after‑free‑Detektoren, Memory‑Sanitizer, sichere Sprachen, Pointer‑Invalidation und Lebensdauersanalyse. Unbehandelt führt es zu Zuverlässigkeitsfehlern und Sicherheitslücken.
Umkehrung
Umkehrung
Das Gegenteil ist starke Speichersicherheit: Referenzen dürfen nicht länger leben als ihr Referent, entweder durch automatische Lifetime‑Durchsetzung, Borrow‑Checking oder Laufzeitprüfungen, die Zugriffe nach Free verhindern.
Abgrenzung
Abgrenzung
Betifft direkten Speicherzugriff und andere Verletzungen von Objektlebensdauern (File‑Handles, GPU‑Ressourcen). Schließt die bloße Nutzung veralteter, aber noch gültiger gecachter Werte aus und unterscheidet sich von Double‑Free (zweifache Freigabe) und Leak (Nicht‑Freigabe). Das Verhalten ist oft allocator‑ und plattformabhängig.
Semantische Spannung
Semantische Spannung
Spannung zu Use‑after‑Move und veralteten Referenzen in verwalteten Sprachen: Einige Sprachen definieren Moves, die Referenzen sicher invalidieren, andere erlauben Resurrektionen oder Finalizer, die die Lebensdaueranalyse verkomplizieren.
Synthese
Synthese
Use‑after‑free fasst Bugs zusammen, bei denen eine Referenz ihr Ziel überlebt und danach verwendet wird, was undefiniertes und oft ausnutzbares Verhalten erzeugt; Vermeidung erfordert explizite Lifetime/Ownership‑Disziplin, Sanitizer oder Speicher‑Sicherheitsmechanismen.