Use-After-Free (UAF) ist eine Speichersicherheitslücke, bei der ein Programm einen Speicherbereich weiterverwendet, nachdem er bereits freigegeben wurde.
Wie Use-After-Free funktioniert
In C und C++ reserviert ein Programm Speicher für ein Objekt, nutzt es und gibt ihn später frei. Hält irgendein Code noch einen Zeiger darauf – einen „Dangling Pointer“ – und verwendet ihn erneut, liest oder schreibt das Programm Speicher, der inzwischen etwas anderem gehören kann. Ein Angreifer löst die Freigabe gezielt aus, füllt den freigewordenen Speicher mit präparierten Daten (Heap Spraying bzw. Heap Grooming) und bringt das Programm dazu, diese Daten als das alte Objekt zu behandeln. Ruft das Programm über dieses Objekt eine Funktion auf, springt die Ausführung an eine vom Angreifer gewählte Stelle.
Die Schwäche ist als CWE-416 katalogisiert. Besonders häufig tritt sie in komplexer Software mit vielen Objekten und Callbacks auf: Browser-Engines, PDF-Readern, Betriebssystemkernen und Treibern.
Warum Use-After-Free wichtig ist
UAF-Fehler zählen zu den häufigsten Ursachen von Zero-Day-Exploits, die in freier Wildbahn gegen Chrome, Safari, Firefox und den Windows-Kernel eingesetzt werden. Ein Browser-UAF ermöglicht meist Remote Code Execution im Renderer schon beim Aufruf einer Webseite; anschließend kombinieren Angreifer ihn mit einem Sandbox-Ausbruch. Zusammen mit Pufferüberläufen gehört Use-After-Free zu den Speicherfehlern, die laut Microsoft und Google rund 70 % ihrer schweren Sicherheitslücken verursachen.
Wie man Use-After-Free verhindert
- Neue Komponenten in speichersicheren Sprachen wie Rust schreiben.
- In C++ Smart Pointer und klare Besitzregeln verwenden, Zeiger nach der Freigabe auf null setzen.
- Härtungen einsetzen: MiraclePtr in Chrome, gehärtete Allocatoren, Memory Tagging (ARM MTE).
- Code mit AddressSanitizer fuzzen, der UAF-Zugriffe sofort meldet.
- Für Nutzer: Browser- und System-Updates schnell installieren, denn UAF-Exploits werden oft vor oder unmittelbar nach dem Patch eingesetzt.