Heap Functions Security Checks
Reading time: 6 minutes
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.
unlink
Para más información, consulta:
Este es un resumen de las comprobaciones 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
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, consulta:
- Comprobaciones 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, activar:
- 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 novictim->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:
- Comprobaciones 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) activar:
- 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, verificar 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
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.