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, 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 chunk
Mensaje de error: corrupted size vs. prev_size
Verificar 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, verificar 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, 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 no victim->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
Verificaciones en tcache_get_n
:
Si el chunk está desalineado:
Mensaje de error: malloc(): unaligned tcache chunk detected
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
Verificaciones 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, 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
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
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
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
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
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