Heap Functions Security Checks
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Para más información consulta:
unlinkEste es un resumen de las comprobaciones realizadas:
Verifica si el tamaño indicado del chunk es el mismo que el prev_size
indicado en el siguiente chunk
Mensaje de error: corrupted size vs. prev_size
Verifica también que P->fd->bk == P
y P->bk->fw == P
Mensaje de error: corrupted double-linked list
Si el chunk no es pequeño, verifica que P->fd_nextsize->bk_nextsize == P
y P->bk_nextsize->fd_nextsize == P
Mensaje de error: corrupted double-linked list (not small)
Para más información consulta:
malloc & sysmallocComprobaciones durante la búsqueda en fast bin:
Si el chunk está desalineado:
Mensaje de error: malloc(): unaligned fastbin chunk detected 2
Si el chunk hacia adelante está desalineado:
Mensaje de error: malloc(): unaligned fastbin chunk detected
Si el chunk devuelto tiene un tamaño que no es correcto debido a su índice en el fast bin:
Mensaje de error: malloc(): memory corruption (fast)
Si algún chunk utilizado para llenar el tcache está desalineado:
Mensaje de error: malloc(): unaligned fastbin chunk detected 3
Comprobaciones durante la búsqueda en small bin:
Si victim->bk->fd != victim
:
Mensaje de error: malloc(): smallbin double linked list corrupted
Comprobaciones durante la consolidación realizadas para cada chunk de fast bin:
Si el chunk está desalineado, activa:
Mensaje de error: malloc_consolidate(): unaligned fastbin chunk detected
Si el chunk tiene un tamaño diferente al que debería debido al índice en el que se encuentra:
Mensaje de error: malloc_consolidate(): invalid chunk size
Si el chunk anterior no está en uso y el chunk anterior tiene un tamaño diferente al indicado por prev_chunk:
Mensaje de error: corrupted size vs. prev_size in fastbins
Comprobaciones durante la búsqueda en unsorted bin:
Si el tamaño del chunk es extraño (demasiado pequeño o demasiado grande):
Mensaje de error: malloc(): invalid size (unsorted)
Si el tamaño del siguiente chunk es extraño (demasiado pequeño o demasiado grande):
Mensaje de error: malloc(): invalid next size (unsorted)
Si el tamaño anterior indicado por el siguiente chunk difiere del tamaño del chunk:
Mensaje de error: malloc(): mismatching next->prev_size (unsorted)
Si no victim->bck->fd == victim
o no victim->fd == av (arena)
:
Mensaje de error: malloc(): unsorted double linked list corrupted
Como siempre estamos verificando el último, su fd debería estar apuntando siempre a la estructura de arena.
Si el siguiente chunk no indica que el anterior está en uso:
Mensaje de error: malloc(): invalid next->prev_inuse (unsorted)
Si fwd->bk_nextsize->fd_nextsize != fwd
:
Mensaje de error: malloc(): largebin double linked list corrupted (nextsize)
Si fwd->bk->fd != fwd
:
Mensaje de error: malloc(): largebin double linked list corrupted (bk)
Comprobaciones durante la búsqueda en large bin (por índice):
bck->fd-> bk != bck
:
Mensaje de error: malloc(): corrupted unsorted chunks
Comprobaciones durante la búsqueda en large bin (siguiente más grande):
bck->fd-> bk != bck
:
Mensaje de error: malloc(): corrupted unsorted chunks2
Comprobaciones durante el uso del Top chunk:
chunksize(av->top) > av->system_mem
:
Mensaje de error: malloc(): corrupted top size
tcache_get_n
Comprobaciones en tcache_get_n
:
Si el chunk está desalineado:
Mensaje de error: malloc(): unaligned tcache chunk detected
tcache_thread_shutdown
Comprobaciones en tcache_thread_shutdown
:
Si el chunk está desalineado:
Mensaje de error: tcache_thread_shutdown(): unaligned tcache chunk detected
__libc_realloc
Comprobaciones en __libc_realloc
:
Si el puntero antiguo está desalineado o el tamaño era incorrecto:
Mensaje de error: realloc(): invalid pointer
_int_free
Para más información consulta:
freeComprobaciones al inicio de _int_free
:
El puntero está alineado:
Mensaje de error: free(): invalid pointer
Tamaño mayor que MINSIZE
y tamaño también alineado:
Mensaje de error: free(): invalid size
Comprobaciones en _int_free
tcache:
Si hay más entradas que mp_.tcache_count
:
Mensaje de error: free(): too many chunks detected in tcache
Si la entrada no está alineada:
Mensaje de error: free(): unaligned chunk detected in tcache 2
Si el chunk liberado ya fue liberado y está presente como chunk en el tcache:
Mensaje de error: free(): double free detected in tcache 2
Comprobaciones en _int_free
fast bin:
Si el tamaño del chunk es inválido (demasiado grande o pequeño) activa:
Mensaje de error: free(): invalid next size (fast)
Si el chunk agregado ya era el top del fast bin:
Mensaje de error: double free or corruption (fasttop)
Si el tamaño del chunk en la parte superior tiene un tamaño diferente al del chunk que estamos agregando:
Mensaje de error: invalid fastbin entry (free)
_int_free_merge_chunk
Comprobaciones en _int_free_merge_chunk
:
Si el chunk es el top chunk:
Mensaje de error: double free or corruption (top)
Si el siguiente chunk está fuera de los límites de la arena:
Mensaje de error: double free or corruption (out)
Si el chunk no está marcado como usado (en el prev_inuse del siguiente chunk):
Mensaje de error: double free or corruption (!prev)
Si el siguiente chunk tiene un tamaño demasiado pequeño o demasiado grande:
Mensaje de error: free(): invalid next size (normal)
Si el chunk anterior no está en uso, intentará consolidar. Pero, si el prev_size
difiere del tamaño indicado en el chunk anterior:
Mensaje de error: corrupted size vs. prev_size while consolidating
_int_free_create_chunk
Comprobaciones en _int_free_create_chunk
:
Al agregar un chunk en el unsorted bin, verifica si unsorted_chunks(av)->fd->bk == unsorted_chunks(av)
:
Mensaje de error: free(): corrupted unsorted chunks
do_check_malloc_state
Comprobaciones en do_check_malloc_state
:
Si el chunk de fast bin está desalineado:
Mensaje de error: do_check_malloc_state(): unaligned fastbin chunk detected
malloc_consolidate
Comprobaciones en malloc_consolidate
:
Si el chunk de fast bin está desalineado:
Mensaje de error: malloc_consolidate(): unaligned fastbin chunk detected
Si el tamaño del chunk de fast bin es incorrecto:
Mensaje de error: malloc_consolidate(): invalid chunk size
_int_realloc
Comprobaciones en _int_realloc
:
El tamaño es demasiado grande o demasiado pequeño:
Mensaje de error: realloc(): invalid old size
El tamaño del siguiente chunk es demasiado grande o demasiado pequeño:
Mensaje de error: realloc(): invalid next size
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)