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

Desbordamiento de heap

Revisado porCybersecurity entrepreneur & security researcher

¿Qué es Desbordamiento de heap?

Desbordamiento de heapDesbordamiento de búfer que ocurre en memoria asignada dinámicamente y que a menudo corrompe metadatos del asignador, punteros a funciones o tablas virtuales de objetos.


Un desbordamiento de heap escribe más allá del final de un búfer asignado en el heap, machacando bloques (chunks) adyacentes o los metadatos de gestión que administran malloc/free, jemalloc, mimalloc u otros asignadores. A diferencia de los desbordamientos de pila, no hay una dirección de retorno que secuestrar directamente; en su lugar, los atacantes corrompen datos en los que el programa confiará más tarde: el puntero a función de un objeto adyacente, un puntero a vtable de C++, el bloque de control de un smart pointer o los enlaces de la lista de libres del asignador usados durante free() (la clásica primitiva de "unlink").

Como el layout del heap no es determinista, la explotación depende del heap grooming / feng shui: realizar asignaciones y liberaciones controladas para que un objetivo útil quede justo después del búfer vulnerable. Un caso real canónico es GHOST (CVE-2015-0235), un desbordamiento de heap en la función __nss_hostname_digits_dots() de glibc, alcanzable a través de gethostbyname(); Qualys demostró en 2015 la ejecución remota de código completa contra el servidor de correo Exim, y el fallo había existido de forma silenciosa desde glibc 2.2. CVE-2018-4407 mostró la misma clase de fallo en el kernel XNU de Apple, activable de forma remota con un único paquete TCP manipulado.

flowchart TD
  A[Asignar objeto víctima + búfer vulnerable de forma adyacente] --> B[El heap grooming coloca el objetivo tras el búfer]
  B --> C[El desbordamiento escribe más allá del final del búfer]
  C --> D{Objetivo corrompido}
  D -->|Metadatos del asignador| E[free unlink -> escritura arbitraria]
  D -->|Puntero a función / vtable| F[Redirigir el flujo de control]
  E --> G[Ejecución de código]
  F --> G

Las defensas combinan el endurecimiento del asignador (comprobaciones de integridad de metadatos, unlink seguro, aislamiento de bloques, páginas guardia) con ASLR, CFI, sandboxing y la migración a lenguajes seguros en memoria como Rust. Los desbordamientos de heap siguen siendo centrales en la explotación de navegadores, kernels y analizadores de documentos, y aparecen con frecuencia en las cadenas ganadoras de Pwn2Own.

Ejemplos

  1. 01

    GHOST (CVE-2015-0235): un desbordamiento de heap en la función gethostbyname de glibc, alcanzable a través de servidores de correo Exim.

  2. 02

    CVE-2018-4407: un desbordamiento de heap en las opciones TCP del kernel XNU, activable a través de la red.

Preguntas frecuentes

¿Qué es Desbordamiento de heap?

Desbordamiento de búfer que ocurre en memoria asignada dinámicamente y que a menudo corrompe metadatos del asignador, punteros a funciones o tablas virtuales de objetos. Pertenece a la categoría de Vulnerabilidades en ciberseguridad.

¿Qué significa Desbordamiento de heap?

Desbordamiento de búfer que ocurre en memoria asignada dinámicamente y que a menudo corrompe metadatos del asignador, punteros a funciones o tablas virtuales de objetos.

¿Cómo defenderse de Desbordamiento de heap?

Las defensas contra Desbordamiento de heap combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.

¿Cuáles son otros nombres para Desbordamiento de heap?

Nombres alternativos comunes: Desbordamiento de búfer en el heap.

Términos relacionados

Véase también