Heap Functions Security Checks

Apoie o HackTricks

Para mais informações, verifique:

unlink

Esta é um resumo das verificações realizadas:

  • Verificar se o tamanho indicado do chunk é o mesmo que o prev_size indicado no próximo chunk

  • Mensagem de erro: corrupted size vs. prev_size

  • Verificar também se P->fd->bk == P e P->bk->fw == P

  • Mensagem de erro: corrupted double-linked list

  • Se o chunk não é pequeno, verificar se P->fd_nextsize->bk_nextsize == P e P->bk_nextsize->fd_nextsize == P

  • Mensagem de erro: corrupted double-linked list (not small)

_int_malloc

Para mais informações, verifique:

malloc & sysmalloc
  • Verificações durante a busca de fast bin:

  • Se o chunk estiver desalinhado:

  • Mensagem de erro: malloc(): unaligned fastbin chunk detected 2

  • Se o chunk à frente estiver desalinhado:

  • Mensagem de erro: malloc(): unaligned fastbin chunk detected

  • Se o chunk retornado tiver um tamanho incorreto devido ao seu índice no fast bin:

  • Mensagem de erro: malloc(): memory corruption (fast)

  • Se algum chunk usado para preencher o tcache estiver desalinhado:

  • Mensagem de erro: malloc(): unaligned fastbin chunk detected 3

  • Verificações durante a busca de small bin:

  • Se victim->bk->fd != victim:

  • Mensagem de erro: malloc(): smallbin double linked list corrupted

  • Verificações durante a consolidação realizadas para cada chunk do fast bin:

  • Se o chunk estiver desalinhado, acionar:

  • Mensagem de erro: malloc_consolidate(): unaligned fastbin chunk detected

  • Se o chunk tiver um tamanho diferente do que deveria devido ao índice em que está:

  • Mensagem de erro: malloc_consolidate(): invalid chunk size

  • Se o chunk anterior não estiver em uso e o chunk anterior tiver um tamanho diferente do indicado por prev_chunk:

  • Mensagem de erro: corrupted size vs. prev_size in fastbins

  • Verificações durante a busca de unsorted bin:

  • Se o tamanho do chunk estiver estranho (muito pequeno ou muito grande):

  • Mensagem de erro: malloc(): invalid size (unsorted)

  • Se o tamanho do próximo chunk estiver estranho (muito pequeno ou muito grande):

  • Mensagem de erro: malloc(): invalid next size (unsorted)

  • Se o tamanho anterior indicado pelo próximo chunk diferir do tamanho do chunk:

  • Mensagem de erro: malloc(): mismatching next->prev_size (unsorted)

  • Se não victim->bck->fd == victim ou não victim->fd == av (arena):

  • Mensagem de erro: malloc(): unsorted double linked list corrupted

  • Como sempre estamos verificando o último, seu fd deve estar sempre apontando para a estrutura da arena.

  • Se o próximo chunk não estiver indicando que o anterior está em uso:

  • Mensagem de erro: malloc(): invalid next->prev_inuse (unsorted)

  • Se fwd->bk_nextsize->fd_nextsize != fwd:

  • Mensagem de erro: malloc(): largebin double linked list corrupted (nextsize)

  • Se fwd->bk->fd != fwd:

  • Mensagem de erro: malloc(): largebin double linked list corrupted (bk)

  • Verificações durante a busca de large bin (por índice):

  • bck->fd-> bk != bck:

  • Mensagem de erro: malloc(): corrupted unsorted chunks

  • Verificações durante a busca de large bin (próximo maior):

  • bck->fd-> bk != bck:

  • Mensagem de erro: malloc(): corrupted unsorted chunks2

  • Verificações durante o uso do Top chunk:

  • chunksize(av->top) > av->system_mem:

  • Mensagem de erro: malloc(): corrupted top size

tcache_get_n

  • Verificações em tcache_get_n:

  • Se o chunk estiver desalinhado:

  • Mensagem de erro: malloc(): unaligned tcache chunk detected

tcache_thread_shutdown

  • Verificações em tcache_thread_shutdown:

  • Se o chunk estiver desalinhado:

  • Mensagem de erro: tcache_thread_shutdown(): unaligned tcache chunk detected

__libc_realloc

  • Verificações em __libc_realloc:

  • Se o ponteiro antigo estiver desalinhado ou o tamanho estiver incorreto:

  • Mensagem de erro: realloc(): invalid pointer

_int_free

Para mais informações, verifique:

free
  • Verificações no início do _int_free:

  • Ponteiro está alinhado:

  • Mensagem de erro: free(): invalid pointer

  • Tamanho maior que MINSIZE e tamanho também alinhado:

  • Mensagem de erro: free(): invalid size

  • Verificações no tcache do _int_free:

  • Se houver mais entradas do que mp_.tcache_count:

  • Mensagem de erro: free(): too many chunks detected in tcache

  • Se a entrada não estiver alinhada:

  • Mensagem de erro: free(): unaligned chunk detected in tcache 2

  • Se o chunk liberado já foi liberado e está presente como chunk no tcache:

  • Mensagem de erro: free(): double free detected in tcache 2

  • Verificações no fast bin do _int_free:

  • Se o tamanho do chunk for inválido (muito grande ou pequeno) acionar:

  • Mensagem de erro: free(): invalid next size (fast)

  • Se o chunk adicionado já estiver no topo do fast bin:

  • Mensagem de erro: double free or corruption (fasttop)

  • Se o tamanho do chunk no topo tiver um tamanho diferente do chunk que estamos adicionando:

  • Mensagem de erro: invalid fastbin entry (free)

_int_free_merge_chunk

  • Verificações em _int_free_merge_chunk:

  • Se o chunk é o chunk superior:

  • Mensagem de erro: double free or corruption (top)

  • Se o próximo chunk está fora dos limites da arena:

  • Mensagem de erro: double free or corruption (out)

  • Se o chunk não está marcado como usado (no prev_inuse do chunk seguinte):

  • Mensagem de erro: double free or corruption (!prev)

  • Se o próximo chunk tem um tamanho muito pequeno ou muito grande:

  • Mensagem de erro: free(): invalid next size (normal)

  • Se o chunk anterior não está em uso, ele tentará consolidar. Mas, se o prev_size difere do tamanho indicado no chunk anterior:

  • Mensagem de erro: corrupted size vs. prev_size while consolidating

_int_free_create_chunk

  • Verificações em _int_free_create_chunk:

  • Ao adicionar um chunk no bin não ordenado, verificar se unsorted_chunks(av)->fd->bk == unsorted_chunks(av):

  • Mensagem de erro: free(): corrupted unsorted chunks

do_check_malloc_state

  • Verificações em do_check_malloc_state:

  • Se o chunk do fast bin estiver desalinhado:

  • Mensagem de erro: do_check_malloc_state(): unaligned fastbin chunk detected

malloc_consolidate

  • Verificações em malloc_consolidate:

  • Se o chunk do fast bin estiver desalinhado:

  • Mensagem de erro: malloc_consolidate(): unaligned fastbin chunk detected

  • Se o tamanho do chunk do fast bin estiver incorreto:

  • Mensagem de erro: malloc_consolidate(): invalid chunk size

_int_realloc

  • Verificações em _int_realloc:

  • Tamanho é muito grande ou muito pequeno:

  • Mensagem de erro: realloc(): invalid old size

  • Tamanho do próximo chunk é muito grande ou muito pequeno:

  • Mensagem de erro: realloc(): invalid next size

Last updated