0Pricing
Cyber Security Academy · Lección

Explotación del heap: Use-After-Free y heap spraying

Comprenda los componentes internos de glibc malloc, las condiciones de use-after-free y las técnicas de heap spraying.

Explotación del heap: Use-After-Free y heap spraying es una lección gratuita de Cyber Security Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cyber Security Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cyber Security Academy incluye 4 lecciones en total.

El heap

El heap es memoria dinámica asignada en tiempo de ejecución mediante malloc()/free()/new/delete. A diferencia de la pila, la disposición del heap viene determinada por los patrones de asignación y liberación, no por la pila de llamadas. Las vulnerabilidades del heap son comunes en navegadores, analizadores y demonios de red.

Use-After-Free (UAF)

Una vulnerabilidad de Use-After-Free ocurre cuando un programa continúa utilizando una región de memoria después de liberarla. Si la región liberada se reasigna con datos controlados por el atacante, el programa pasa a operar sobre datos del atacante mediante el puntero obsoleto.

Ejemplo de UAF

Patrón de UAF:

// Vulnerable C code:
struct Object *obj = malloc(sizeof(*obj));
free(obj);
// Later, attacker causes a new malloc to fill the freed region
// with their data...
obj->method();  // now calls attacker's function pointer!

Heap Feng Shui

El heap feng shui (o acondicionamiento del heap) es la técnica de manipular el asignador del heap para colocar objetos en posiciones específicas y permitir la reutilización controlada de memoria liberada. El atacante da forma al heap activando asignaciones y liberaciones en una secuencia precisa.

Heap Spraying

El heap spraying asigna grandes cantidades de datos controlados por el atacante (shellcode y sleds de NOP) por todo el heap. Al estar gran parte del heap ocupada, es probable que un puntero incorrecto termine apuntando a los datos del atacante. A menudo se utiliza junto con vulnerabilidades UAF o de confusión de tipos.

// JavaScript heap spray:
var spray = [];
for(var i = 0; i < 100000; i++) {
  spray[i] = unescape("%90%90...shellcode...");
}

Liberación doble

Un double free ocurre cuando la memoria se libera dos veces. La segunda liberación corrompe los metadatos del asignador del heap (punteros de las listas libres), lo que puede permitir que un atacante controle dónde se coloca la siguiente asignación y escriba en una dirección arbitraria.

Desbordamiento de búfer del heap

Al igual que los desbordamientos de pila, un desbordamiento de búfer del heap escribe más allá del final de una asignación del heap. A diferencia de los desbordamientos de pila, el objetivo suele ser los metadatos del heap (tamaño y punteros hacia delante y hacia atrás) o asignaciones adyacentes que contienen punteros de función o punteros de vtable.

Confusión de tipos

La confusión de tipos ocurre cuando una región de memoria asignada como un tipo se utiliza como otro diferente. Es común en motores de JavaScript y código C++. Si un atacante puede controlar el orden de las asignaciones, puede hacer que el motor trate los datos del atacante como un objeto de confianza.

Aspectos internos de ptmalloc y tcmalloc

Comprender el asignador del heap ayuda al desarrollo de exploits. El ptmalloc de glibc utiliza bins (unsorted, small y large) y fast bins. tcache (caché por hilo) es la primera fuente de asignaciones. Los exploits suelen dirigirse a la corrupción de bins para controlar las direcciones de futuras asignaciones.

Mitigaciones

Mitigaciones contra la explotación del heap:

  • Aleatorización del heap (parte de ASLR) — aleatoriza la base del heap
  • Desenlazado seguro — verifica los punteros hacia delante y hacia atrás antes de desenlazar
  • Detección del envenenamiento de tcache — añadida en glibc 2.32
  • Ofuscación de punteros — cifra los punteros almacenados en tcache
  • Lenguajes seguros para la memoria — Rust elimina UAF en tiempo de compilación

Exploits del heap en navegadores

La mayoría de los exploits de día cero de los navegadores implican vulnerabilidades del heap en motores de JavaScript (V8, SpiderMonkey). Los navegadores modernos superponen cadenas de evasión del sandbox: vulnerabilidad del heap en el proceso de renderizado → evasión hacia el proceso del navegador → escalada de privilegios en el sistema operativo. Cada paso requiere su propia técnica.

Comprobación rápida: explotación del heap

¿Qué vulnerabilidad permite que un atacante controle la ejecución del programa mediante un puntero obsoleto a una memoria que ya se ha liberado y reasignado con datos del atacante?

Resumen de la lección

Las vulnerabilidades del heap — UAF, double free, desbordamiento del heap y confusión de tipos — explotan una gestión incorrecta de la memoria dinámica. Use-After-Free es la clase de exploit moderna más frecuente. El heap spraying maximiza la probabilidad de apuntar a datos del atacante. Mitigaciones: ASLR, desenlazado seguro y ofuscación de punteros. Los lenguajes seguros para la memoria, como Rust, eliminan por completo estas clases de vulnerabilidades.

Preguntas frecuentes

¿La lección «Explotación del heap: Use-After-Free y heap spraying» es gratis?

Sí — el texto completo de «Explotación del heap: Use-After-Free y heap spraying» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cyber Security Academy, actualiza a CoddyKit PRO. El curso de Cyber Security Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Explotación del heap: Use-After-Free y heap spraying»?

Comprenda los componentes internos de glibc malloc, las condiciones de use-after-free y las técnicas de heap spraying. Practicas Cyber Security Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cyber Security Academy?

No se requiere experiencia previa. Cyber Security Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Explotación del heap: Use-After-Free y heap spraying»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cyber Security Academy?

Sí. Cada lección de Cyber Security Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Desbordamientos de búfer en la pila
  2. Programación orientada al retorno (ROP)
  3. Vulnerabilidades de cadenas de formato
  4. Explotación del heap: Use-After-Free y heap spraying
← Volver a Cyber Security Academy