Двойное освобождение
Что такое Двойное освобождение?
Двойное освобождениеОшибка безопасности памяти, при которой один и тот же чанк кучи освобождается дважды, повреждая метаданные аллокатора и часто открывая возможность выполнения произвольного кода.
Двойное освобождение происходит, когда free()/delete вызывается более одного раза для одного указателя. Списки свободных блоков или bin-структуры аллокатора становятся несогласованными, и атакующий может заставить последующее выделение вернуть подконтрольную или пересекающуюся с живыми объектами память — это примитив для произвольных записей и выполнения кода. Классификация — CWE-415; нередко сопровождает use-after-free и double-fetch. Защита: модели единичного владения (RAII, smart pointers), обнуление указателей после free, усиленные аллокаторы с детектированием двойных free (защита tcache в glibc, scudo), тестирование с AddressSanitizer и memory-safe языки.
● Примеры
- 01
CVE-2015-1322: двойное освобождение в tcache glibc, ведущее к повреждению кучи.
- 02
CVE-2019-19377: двойное освобождение в btrfs Linux, вызванное некорректными образами.
● Частые вопросы
Что такое Двойное освобождение?
Ошибка безопасности памяти, при которой один и тот же чанк кучи освобождается дважды, повреждая метаданные аллокатора и часто открывая возможность выполнения произвольного кода. Относится к категории Уязвимости в кибербезопасности.
Что означает Двойное освобождение?
Ошибка безопасности памяти, при которой один и тот же чанк кучи освобождается дважды, повреждая метаданные аллокатора и часто открывая возможность выполнения произвольного кода.
Как защититься от Двойное освобождение?
Защита от Двойное освобождение обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Двойное освобождение?
Распространённые альтернативные названия: Уязвимость двойного освобождения.