CyberGlossary

Уязвимости

Двойное освобождение

Также известно как: Уязвимость двойного освобождения

Определение

Ошибка безопасности памяти, при которой один и тот же чанк кучи освобождается дважды, повреждая метаданные аллокатора и часто открывая возможность выполнения произвольного кода.

Двойное освобождение происходит, когда free()/delete вызывается более одного раза для одного указателя. Списки свободных блоков или bin-структуры аллокатора становятся несогласованными, и атакующий может заставить последующее выделение вернуть подконтрольную или пересекающуюся с живыми объектами память — это примитив для произвольных записей и выполнения кода. Классификация — CWE-415; нередко сопровождает use-after-free и double-fetch. Защита: модели единичного владения (RAII, smart pointers), обнуление указателей после free, усиленные аллокаторы с детектированием двойных free (защита tcache в glibc, scudo), тестирование с AddressSanitizer и memory-safe языки.

Примеры

  • CVE-2015-1322: двойное освобождение в tcache glibc, ведущее к повреждению кучи.
  • CVE-2019-19377: двойное освобождение в btrfs Linux, вызванное некорректными образами.

Связанные термины