Heap Functions Security Checks

Impara e pratica l'hacking di AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'hacking di GCP: HackTricks Training GCP Red Team Expert (GRTE)

Sostieni HackTricks

Per ulteriori informazioni controlla:

unlink

Questo è un riassunto dei controlli eseguiti:

  • Controlla se la dimensione indicata del chunk è la stessa di prev_size indicata nel chunk successivo

  • Messaggio di errore: dimensione danneggiata rispetto a prev_size

  • Controlla anche che P->fd->bk == P e P->bk->fw == P

  • Messaggio di errore: lista doppiamente collegata danneggiata

  • Se il chunk non è piccolo, controlla che P->fd_nextsize->bk_nextsize == P e P->bk_nextsize->fd_nextsize == P

  • Messaggio di errore: lista doppiamente collegata danneggiata (non piccola)

_int_malloc

Per ulteriori informazioni controlla:

malloc & sysmalloc
  • Controlli durante la ricerca del fast bin:

  • Se il chunk è non allineato:

  • Messaggio di errore: malloc(): rilevato chunk fastbin non allineato 2

  • Se il chunk successivo è non allineato:

  • Messaggio di errore: malloc(): rilevato chunk fastbin non allineato

  • Se il chunk restituito ha una dimensione non corretta a causa del suo indice nel fast bin:

  • Messaggio di errore: malloc(): corruzione della memoria (veloce)

  • Se un qualsiasi chunk utilizzato per riempire il tcache è non allineato:

  • Messaggio di errore: malloc(): rilevato chunk fastbin non allineato 3

  • Controlli durante la ricerca del small bin:

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

  • Messaggio di errore: malloc(): lista doppiamente collegata smallbin danneggiata

  • Controlli durante la consolidazione eseguiti per ogni chunk del fast bin:

  • Se il chunk è non allineato attiva:

  • Messaggio di errore: malloc_consolidate(): rilevato chunk fastbin non allineato

  • Se il chunk ha una dimensione diversa da quella che dovrebbe a causa dell'indice in cui si trova:

  • Messaggio di errore: malloc_consolidate(): dimensione del chunk non valida

  • Se il chunk precedente non è in uso e il chunk precedente ha una dimensione diversa da quella indicata da prev_chunk:

  • Messaggio di errore: dimensione danneggiata rispetto a prev_size in fastbins

  • Controlli durante la ricerca del unsorted bin:

  • Se la dimensione del chunk è strana (troppo piccola o troppo grande):

  • Messaggio di errore: malloc(): dimensione non valida (non ordinata)

  • Se la dimensione del chunk successivo è strana (troppo piccola o troppo grande):

  • Messaggio di errore: malloc(): dimensione successiva non valida (non ordinata)

  • Se la dimensione precedente indicata dal chunk successivo differisce dalla dimensione del chunk:

  • Messaggio di errore: malloc(): dimensione next->prev non corrispondente (non ordinata)

  • Se non victim->bck->fd == victim o non victim->fd == av (arena):

  • Messaggio di errore: malloc(): lista doppiamente collegata non ordinata danneggiata

  • Poiché stiamo sempre controllando l'ultimo, il suo fd dovrebbe puntare sempre alla struttura arena.

  • Se il chunk successivo non indica che il precedente è in uso:

  • Messaggio di errore: malloc(): next->prev_inuse non valido (non ordinato)

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

  • Messaggio di errore: malloc(): lista doppiamente collegata largebin danneggiata (nextsize)

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

  • Messaggio di errore: malloc(): lista doppiamente collegata largebin danneggiata (bk)

  • Controlli durante la ricerca del large bin (per indice):

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

  • Messaggio di errore: malloc(): chunk non ordinati corrotti

  • Controlli durante la ricerca del large bin (successivo più grande):

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

  • Messaggio di errore: malloc(): chunk non ordinati corrotti2

  • Controlli durante l'uso del Top chunk:

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

  • Messaggio di errore: malloc(): dimensione top corrotta

tcache_get_n

  • Controlli in tcache_get_n:

  • Se il chunk è non allineato:

  • Messaggio di errore: malloc(): rilevato chunk tcache non allineato

tcache_thread_shutdown

  • Controlli in tcache_thread_shutdown:

  • Se il chunk è non allineato:

  • Messaggio di errore: tcache_thread_shutdown(): rilevato chunk tcache non allineato

__libc_realloc

  • Controlli in __libc_realloc:

  • Se il vecchio puntatore è non allineato o la dimensione era incorretta:

  • Messaggio di errore: realloc(): puntatore non valido

_int_free

Per ulteriori informazioni controlla:

free
  • Controlli all'inizio di _int_free:

  • Il puntatore è allineato:

  • Messaggio di errore: free(): puntatore non valido

  • Dimensione maggiore di MINSIZE e dimensione anche allineata:

  • Messaggio di errore: free(): dimensione non valida

  • Controlli in _int_free tcache:

  • Se ci sono più voci di mp_.tcache_count:

  • Messaggio di errore: free(): troppi chunk rilevati nel tcache

  • Se l'entry non è allineata:

  • Messaggio di errore: free(): rilevato chunk non allineato nel tcache 2

  • Se il chunk liberato era già stato liberato e è presente come chunk nel tcache:

  • Messaggio di errore: free(): doppia liberazione rilevata nel tcache 2

  • Controlli in _int_free fast bin:

  • Se la dimensione del chunk è non valida (troppo grande o piccola) attiva:

  • Messaggio di errore: free(): dimensione successiva non valida (veloce)

  • Se il chunk aggiunto era già in cima al fast bin:

  • Messaggio di errore: doppia liberazione o corruzione (fasttop)

  • Se la dimensione del chunk in cima ha una dimensione diversa dal chunk che stiamo aggiungendo:

  • Messaggio di errore: voce fastbin non valida (libera)

_int_free_merge_chunk

  • Controlli in _int_free_merge_chunk:

  • Se il chunk è il chunk superiore:

  • Messaggio di errore: double free or corruption (top)

  • Se il chunk successivo è al di fuori dei limiti dell'arena:

  • Messaggio di errore: double free or corruption (out)

  • Se il chunk non è contrassegnato come in uso (nel prev_inuse del chunk successivo):

  • Messaggio di errore: double free or corruption (!prev)

  • Se il chunk successivo ha una dimensione troppo piccola o troppo grande:

  • Messaggio di errore: free(): invalid next size (normal)

  • Se il chunk precedente non è in uso, cercherà di consolidare. Ma, se la prev_size differisce dalla dimensione indicata nel chunk precedente:

  • Messaggio di errore: corrupted size vs. prev_size while consolidating

_int_free_create_chunk

  • Controlli in _int_free_create_chunk:

  • Aggiungendo un chunk nel bin non ordinato, controlla se unsorted_chunks(av)->fd->bk == unsorted_chunks(av):

  • Messaggio di errore: free(): corrupted unsorted chunks

do_check_malloc_state

  • Controlli in do_check_malloc_state:

  • Se il chunk del bin veloce non è allineato correttamente:

  • Messaggio di errore: do_check_malloc_state(): unaligned fastbin chunk detected

malloc_consolidate

  • Controlli in malloc_consolidate:

  • Se il chunk del bin veloce non è allineato correttamente:

  • Messaggio di errore: malloc_consolidate(): unaligned fastbin chunk detected

  • Se la dimensione del chunk del bin veloce non è corretta:

  • Messaggio di errore: malloc_consolidate(): invalid chunk size

_int_realloc

  • Controlli in _int_realloc:

  • La dimensione è troppo grande o troppo piccola:

  • Messaggio di errore: realloc(): invalid old size

  • La dimensione del chunk successivo è troppo grande o troppo piccola:

  • Messaggio di errore: realloc(): invalid next size

Last updated