Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 527

Переполнение кучи

ПроверилCybersecurity entrepreneur & security researcher

Что такое Переполнение кучи?

Переполнение кучиПереполнение буфера, возникающее в динамически выделяемой памяти и часто повреждающее метаданные аллокатора, указатели на функции или таблицы виртуальных методов объектов.


Переполнение кучи записывает данные за пределами конца буфера, выделенного в куче, затирая соседние чанки или служебные метаданные, которыми управляют malloc/free, jemalloc, mimalloc и другие аллокаторы. В отличие от переполнения стека, здесь нет адреса возврата, который можно было бы перехватить напрямую; вместо этого злоумышленники повреждают данные, которым программа доверится позже, — указатель на функцию соседнего объекта, указатель на vtable в C++, управляющий блок умного указателя или ссылки списка свободных блоков аллокатора, используемые при вызове free() (классический примитив «unlink»).

Поскольку расположение объектов в куче недетерминировано, эксплуатация зависит от груминга кучи / фэн-шуй (heap grooming / feng shui): выполнения контролируемых выделений и освобождений памяти, чтобы полезная цель оказалась непосредственно после уязвимого буфера. Каноничный реальный пример — GHOST (CVE-2015-0235), переполнение кучи в функции __nss_hostname_digits_dots() библиотеки glibc, достижимое через gethostbyname(); в 2015 году Qualys продемонстрировала полное удалённое выполнение кода против почтового сервера Exim, а сам дефект незаметно существовал начиная с glibc 2.2. CVE-2018-4407 показала тот же класс уязвимостей в ядре XNU компании Apple, вызываемый удалённо одним специально сформированным TCP-пакетом.

flowchart TD
  A[Выделить объект-жертву и уязвимый буфер рядом] --> B[Груминг кучи размещает цель после буфера]
  B --> C[Переполнение пишет за пределы конца буфера]
  C --> D{Повреждённая цель}
  D -->|Метаданные аллокатора| E[free unlink -> произвольная запись]
  D -->|Указатель на функцию / vtable| F[Перенаправить поток управления]
  E --> G[Выполнение кода]
  F --> G

Защита сочетает усиление аллокатора (проверки целостности метаданных, безопасный unlink, изоляцию чанков, страницы-охранники) с ASLR, CFI, песочницами и переходом на безопасные по памяти языки, такие как Rust. Переполнения кучи остаются центральными для эксплуатации браузеров, ядер и парсеров документов и часто фигурируют в победных цепочках Pwn2Own.

Примеры

  1. 01

    GHOST (CVE-2015-0235) — переполнение кучи в функции gethostbyname библиотеки glibc, достижимое через почтовые серверы Exim.

  2. 02

    CVE-2018-4407 — переполнение кучи в TCP-опциях ядра XNU, вызываемое по сети.

Частые вопросы

Что такое Переполнение кучи?

Переполнение буфера, возникающее в динамически выделяемой памяти и часто повреждающее метаданные аллокатора, указатели на функции или таблицы виртуальных методов объектов. Относится к категории Уязвимости в кибербезопасности.

Что означает Переполнение кучи?

Переполнение буфера, возникающее в динамически выделяемой памяти и часто повреждающее метаданные аллокатора, указатели на функции или таблицы виртуальных методов объектов.

Как защититься от Переполнение кучи?

Защита от Переполнение кучи обычно сочетает технические меры и операционные практики, как описано в определении выше.

Какие есть другие названия Переполнение кучи?

Распространённые альтернативные названия: Переполнение буфера в куче.

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

См. также