hacktricks/binary-exploitation/heap/heap-functions-security-checks.md

6.3 KiB

Verificación de Seguridad de Funciones de Heap

Aprende a hackear AWS desde cero hasta convertirte en un héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Esta función elimina un fragmento de una lista doblemente enlazada. Las verificaciones comunes aseguran que la estructura de la lista enlazada permanezca consistente al desvincular fragmentos.

  • Verificaciones de Consistencia:
  • Verificar si P->fd->bk == P y P->bk->fd == P.
  • Mensaje de error: corrupted double-linked list

_int_malloc

Esta función es responsable de asignar memoria desde el heap. Las verificaciones aquí aseguran que la memoria no se corrompa durante la asignación.

  • Verificación de Tamaño de Fastbin:
  • Al eliminar un fragmento de un fastbin, asegúrate de que el tamaño del fragmento esté dentro del rango de fastbin.
  • Mensaje de error: malloc(): memory corruption (fast)
  • Verificación de Consistencia de Smallbin:
  • Al eliminar un fragmento de un smallbin, asegúrate de que los enlaces previo y siguiente en la lista doblemente enlazada sean consistentes.
  • Mensaje de error: malloc(): smallbin double linked list corrupted
  • Verificación de Rango de Memoria de Unsorted Bin:
  • Asegúrate de que el tamaño de los fragmentos en el unsorted bin esté dentro de los límites mínimo y máximo.
  • Mensaje de error: malloc(): memory corruption | malloc(): invalid next size (unsorted)
  • Verificación de Consistencia de Unsorted Bin (Primer Escenario):
  • Al insertar un fragmento restante en el unsorted bin, verifica si unsorted_chunks(av)->fd->bk == unsorted_chunks(av).
  • Mensaje de error: malloc(): corrupted unsorted chunks
  • Verificación de Consistencia de Unsorted Bin (Segundo Escenario):
  • Igual que la verificación anterior, pero se activa al insertar después de dividir un fragmento rápido o pequeño.
  • Mensaje de error: malloc(): corrupted unsorted chunks 2

_int_free

Esta función libera la memoria previamente asignada. Las verificaciones aquí ayudan a garantizar una correcta liberación de memoria y prevenir la corrupción de memoria.

  • Verificación de Límites del Puntero:
  • Asegúrate de que el puntero que se está liberando no esté envolviendo la memoria.
  • Mensaje de error: free(): invalid pointer
  • Verificación de Tamaño:
  • Asegúrate de que el tamaño del fragmento que se está liberando sea al menos MINSIZE o un múltiplo de MALLOC_ALIGNMENT.
  • Mensaje de error: free(): invalid size
  • Verificación de Tamaño de Fastbin:
  • Para fragmentos de fastbin, asegúrate de que el tamaño del siguiente fragmento esté dentro de los límites mínimo y máximo.
  • Mensaje de error: free(): invalid next size (fast)
  • Verificación de Doble Liberación en Fastbin:
  • Al insertar un fragmento en un fastbin, asegúrate de que el fragmento en la cabeza no sea el mismo que el que se está insertando.
  • Mensaje de error: double free or corruption (fasttop)
  • Verificación de Consistencia de Fastbin:
  • Al insertar en un fastbin, asegúrate de que los tamaños del fragmento en la cabeza y el fragmento que se está insertando sean iguales.
  • Mensaje de error: invalid fastbin entry (free)
  • Verificación de Consistencia de Top Chunk:
  • Para fragmentos que no son de fastbin, asegúrate de que el fragmento no sea el mismo que el top chunk.
  • Mensaje de error: double free or corruption (top)
  • Verificación de Límites de Memoria:
  • Asegúrate de que el siguiente fragmento por memoria esté dentro de los límites del área.
  • Mensaje de error: double free or corruption (out)
  • Verificación de Bit Prev_inuse:
  • Asegúrate de que el bit previo en uso en el siguiente fragmento esté marcado.
  • Mensaje de error: double free or corruption (!prev)
  • Verificación de Tamaño Normal:
  • Asegúrate de que el tamaño del siguiente fragmento esté dentro de rangos válidos.
  • Mensaje de error: free(): invalid next size (normal)
  • Verificación de Consistencia de Unsorted Bin:
  • Al insertar un fragmento fusionado en el unsorted bin, verifica si unsorted_chunks(av)->fd->bk == unsorted_chunks(av).
  • Mensaje de error: free(): corrupted unsorted chunks
Aprende a hackear AWS desde cero hasta convertirte en un héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks: