Double free
aus Wikipedia, der freien Enzyklopädie
Double free() (doppelter Aufruf der Funktion free()) ist eine potentielle Sicherheitslücke, die auftritt, wenn ein Programm mehrmals die C-Bibliotheks-Funktion free(3) auf den selben Pointer aufruft; das bedeutet, dass versucht wird, den gleichen Speicherbereich mehrmals wieder freizugeben.
Wenn ein Programm dynamischen Speicher benötigt, fordert es diesen per malloc(3) an, danach muss er per free(3) wieder freigegeben werden. Wenn allerdings versucht wird, einen Speicherbereich mehrfach mittels free(3) freizugeben, kommt es bei den meisten free(3)-Implementierungen zu nicht definiertem Verhalten. Es kann möglich sein das Programm auf diesen Weg abstürzen zu lassen oder sogar an bestimmten Stellen in den Programm-Speicher zu schreiben, was zur Ausführung von beliebigem Code (sogenanntem Shellcode) und Manipulation von Werten in Registern genutzt werden kann. Meist werden solche Situationen erreicht, wenn innerhalb von Signalhandlern oder anderem Code, der unter bestimmten Bedingungen mehrfach benutzt werden kann, Speicher-Freigaben erfolgen.
Die Funktion free(3) ist nur in C, C++ und verwandten Sprachen existent, in der Programmiersprache Object Pascal (Borland Delphi) beispielsweise ist GetMem()/FreeMem() die Entsprechung zum Funktionspaar malloc()/free().
[Bearbeiten] Weblinks
- http://www.cert.org/advisories/CA-2003-02.html - Double-free CVS Server Advisory
- http://web.mit.edu/kerberos/advisories/MITKRB5-SA-2004-002-dblfree.txt - Double-free MIT Kerberos 5 Advisory
- http://www.hackerwiki.org/index.php/Angriffe_auf_unsicher_programmierte_Signal-Handler - typisches Beispiel für die Möglichkeit eines douple-free()-Angriffs