Heap Functions Security Checks
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)
unlink
Para más información, revisa:
unlinkEsta es un resumen de las verificaciones realizadas:
Verificar si el tamaño indicado del chunk es el mismo que el
prev_size
indicado en el siguiente chunkMensaje de error:
corrupted size vs. prev_size
Verificar también que
P->fd->bk == P
yP->bk->fw == P
Mensaje de error:
corrupted double-linked list
Si el chunk no es pequeño, verificar que
P->fd_nextsize->bk_nextsize == P
yP->bk_nextsize->fd_nextsize == P
Mensaje de error:
corrupted double-linked list (not small)
_int_malloc
Para más información, revisa:
malloc & sysmallocVerificaciones durante la búsqueda en fast bin:
Si el chunk está desalineado:
Mensaje de error:
malloc(): unaligned fastbin chunk detected 2
Si el chunk siguiente está desalineado:
Mensaje de error:
malloc(): unaligned fastbin chunk detected
Si el chunk devuelto tiene un tamaño incorrecto 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
Verificaciones durante la búsqueda en small bin:
Si
victim->bk->fd != victim
:Mensaje de error:
malloc(): smallbin double linked list corrupted
Verificaciones durante la consolidación realizadas para cada chunk en fast bin:
Si el chunk está desalineado:
Mensaje de error:
malloc_consolidate(): unaligned fastbin chunk detected
Si el chunk tiene un tamaño diferente al que debería debido a su índice:
Mensaje de error:
malloc_consolidate(): invalid chunk size
Si el chunk anterior no está en uso y tiene un tamaño diferente al indicado por prev_chunk:
Mensaje de error:
corrupted size vs. prev_size in fastbins
Verificaciones 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 chunk siguiente es extraño (demasiado pequeño o demasiado grande):
Mensaje de error:
malloc(): invalid next size (unsorted)
Si el tamaño previo indicado por el chunk siguiente difiere del tamaño del chunk:
Mensaje de error:
malloc(): mismatching next->prev_size (unsorted)
Si no
victim->bck->fd == victim
o novictim->fd == av (arena)
:Mensaje de error:
malloc(): unsorted double linked list corrupted
Como siempre estamos verificando el último, su fd debería apuntar siempre a la estructura de arena.
Si el chunk siguiente 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)
Verificaciones durante la búsqueda en large bin (por índice):
bck->fd-> bk != bck
:Mensaje de error:
malloc(): corrupted unsorted chunks
Verificaciones durante la búsqueda en large bin (siguiente más grande):
bck->fd-> bk != bck
:Mensaje de error:
malloc(): corrupted unsorted chunks2
Verificaciones durante el uso del Top chunk:
chunksize(av->top) > av->system_mem
:Mensaje de error:
malloc(): corrupted top size
tcache_get_n
tcache_get_n
Verificaciones en
tcache_get_n
:Si el chunk está desalineado:
Mensaje de error:
malloc(): unaligned tcache chunk detected
tcache_thread_shutdown
tcache_thread_shutdown
Verificaciones en
tcache_thread_shutdown
:Si el chunk está desalineado:
Mensaje de error:
tcache_thread_shutdown(): unaligned tcache chunk detected
__libc_realloc
__libc_realloc
Verificaciones en
__libc_realloc
:Si el puntero antiguo está desalineado o el tamaño era incorrecto:
Mensaje de error:
realloc(): invalid pointer
_int_free
_int_free
Para más información, revisa:
freeVerificaciones 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
Verificaciones 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 previamente y está presente como chunk en el tcache:
Mensaje de error:
free(): double free detected in tcache 2
Verificaciones en
_int_free
fast bin:Si el tamaño del chunk es inválido (demasiado grande o pequeño) desencadenar:
Mensaje de error:
free(): invalid next size (fast)
Si el chunk añadido ya estaba en la parte superior 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 chunk que estamos añadiendo:
Mensaje de error:
invalid fastbin entry (free)
_int_free_merge_chunk
_int_free_merge_chunk
Verificaciones en
_int_free_merge_chunk
:Si el fragmento es el fragmento superior:
Mensaje de error:
doble liberación o corrupción (top)
Si el siguiente fragmento está fuera de los límites del área de memoria:
Mensaje de error:
doble liberación o corrupción (out)
Si el fragmento no está marcado como usado (en el prev_inuse del fragmento siguiente):
Mensaje de error:
doble liberación o corrupción (!prev)
Si el siguiente fragmento tiene un tamaño demasiado pequeño o demasiado grande:
Mensaje de error:
free(): tamaño siguiente no válido (normal)
Si el fragmento anterior no está en uso, intentará consolidar. Pero, si el
prev_size
difiere del tamaño indicado en el fragmento anterior:Mensaje de error:
tamaño corrupto vs. prev_size al consolidar
_int_free_create_chunk
_int_free_create_chunk
Verificaciones en
_int_free_create_chunk
:Al agregar un fragmento al contenedor no ordenado, verificar si
unsorted_chunks(av)->fd->bk == unsorted_chunks(av)
:Mensaje de error:
free(): fragmentos no ordenados corruptos
do_check_malloc_state
do_check_malloc_state
Verificaciones en
do_check_malloc_state
:Si el fragmento del contenedor rápido está desalineado:
Mensaje de error:
do_check_malloc_state(): detectado fragmento rápido desalineado
malloc_consolidate
malloc_consolidate
Verificaciones en
malloc_consolidate
:Si el fragmento del contenedor rápido está desalineado:
Mensaje de error:
malloc_consolidate(): detectado fragmento rápido desalineado
Si el tamaño del fragmento del contenedor rápido es incorrecto:
Mensaje de error:
malloc_consolidate(): tamaño de fragmento no válido
_int_realloc
_int_realloc
Verificaciones en
_int_realloc
:El tamaño es demasiado grande o demasiado pequeño:
Mensaje de error:
realloc(): tamaño antiguo no válido
El tamaño del siguiente fragmento es demasiado grande o demasiado pequeño:
Mensaje de error:
realloc(): tamaño siguiente no válido
Last updated