Heap Functions Security Checks

Wesprzyj HackTricks

Aby uzyskać więcej informacji, sprawdź:

unlink

To podsumowanie przeprowadzonych kontroli:

  • Sprawdź, czy wskazany rozmiar fragmentu jest taki sam jak prev_size wskazany w następnym fragmencie

  • Komunikat błędu: corrupted size vs. prev_size

  • Sprawdź również, czy P->fd->bk == P i P->bk->fw == P

  • Komunikat błędu: corrupted double-linked list

  • Jeśli fragment nie jest mały, sprawdź, czy P->fd_nextsize->bk_nextsize == P i P->bk_nextsize->fd_nextsize == P

  • Komunikat błędu: corrupted double-linked list (not small)

_int_malloc

Aby uzyskać więcej informacji, sprawdź:

malloc & sysmalloc
  • Kontrole podczas wyszukiwania w fast bin:

  • Jeśli fragment jest źle wyrównany:

  • Komunikat błędu: malloc(): unaligned fastbin chunk detected 2

  • Jeśli następny fragment jest źle wyrównany:

  • Komunikat błędu: malloc(): unaligned fastbin chunk detected

  • Jeśli zwrócony fragment ma niepoprawny rozmiar z powodu jego indeksu w fast bin:

  • Komunikat błędu: malloc(): memory corruption (fast)

  • Jeśli którykolwiek fragment użyty do wypełnienia tcache jest źle wyrównany:

  • Komunikat błędu: malloc(): unaligned fastbin chunk detected 3

  • Kontrole podczas wyszukiwania w small bin:

  • Jeśli victim->bk->fd != victim:

  • Komunikat błędu: malloc(): smallbin double linked list corrupted

  • Kontrole podczas konsolidacji przeprowadzane dla każdego fragmentu fast bin:

  • Jeśli fragment jest źle wyrównany, wywołaj:

  • Komunikat błędu: malloc_consolidate(): unaligned fastbin chunk detected

  • Jeśli fragment ma inny rozmiar niż powinien z powodu indeksu, w którym się znajduje:

  • Komunikat błędu: malloc_consolidate(): invalid chunk size

  • Jeśli poprzedni fragment nie jest używany, a poprzedni fragment ma inny rozmiar niż wskazany przez prev_chunk:

  • Komunikat błędu: corrupted size vs. prev_size in fastbins

  • Kontrole podczas wyszukiwania w unsorted bin:

  • Jeśli rozmiar fragmentu jest dziwny (za mały lub za duży):

  • Komunikat błędu: malloc(): invalid size (unsorted)

  • Jeśli rozmiar następnego fragmentu jest dziwny (za mały lub za duży):

  • Komunikat błędu: malloc(): invalid next size (unsorted)

  • Jeśli rozmiar poprzedni wskazany przez następny fragment różni się od rozmiaru fragmentu:

  • Komunikat błędu: malloc(): mismatching next->prev_size (unsorted)

  • Jeśli nie victim->bck->fd == victim lub nie victim->fd == av (arena):

  • Komunikat błędu: malloc(): unsorted double linked list corrupted

  • Ponieważ zawsze sprawdzamy ostatni, jego fd powinien zawsze wskazywać na strukturę areny.

  • Jeśli następny fragment nie wskazuje, że poprzedni jest używany:

  • Komunikat błędu: malloc(): invalid next->prev_inuse (unsorted)

  • Jeśli fwd->bk_nextsize->fd_nextsize != fwd:

  • Komunikat błędu: malloc(): largebin double linked list corrupted (nextsize)

  • Jeśli fwd->bk->fd != fwd:

  • Komunikat błędu: malloc(): largebin double linked list corrupted (bk)

  • Kontrole podczas wyszukiwania w large bin (według indeksu):

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

  • Komunikat błędu: malloc(): corrupted unsorted chunks

  • Kontrole podczas wyszukiwania w large bin (następny większy):

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

  • Komunikat błędu: malloc(): corrupted unsorted chunks2

  • Kontrole podczas użycia Top chunk:

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

  • Komunikat błędu: malloc(): corrupted top size

tcache_get_n

  • Kontrole w tcache_get_n:

  • Jeśli fragment jest źle wyrównany:

  • Komunikat błędu: malloc(): unaligned tcache chunk detected

tcache_thread_shutdown

  • Kontrole w tcache_thread_shutdown:

  • Jeśli fragment jest źle wyrównany:

  • Komunikat błędu: tcache_thread_shutdown(): unaligned tcache chunk detected

__libc_realloc

  • Kontrole w __libc_realloc:

  • Jeśli stary wskaźnik jest źle wyrównany lub rozmiar był niepoprawny:

  • Komunikat błędu: realloc(): invalid pointer

_int_free

Aby uzyskać więcej informacji, sprawdź:

free
  • Kontrole na początku _int_free:

  • Wskaźnik jest wyrównany:

  • Komunikat błędu: free(): invalid pointer

  • Rozmiar większy niż MINSIZE i również wyrównany:

  • Komunikat błędu: free(): invalid size

  • Kontrole w _int_free tcache:

  • Jeśli jest więcej wpisów niż mp_.tcache_count:

  • Komunikat błędu: free(): too many chunks detected in tcache

  • Jeśli wpis nie jest wyrównany:

  • Komunikat błędu: free(): unaligned chunk detected in tcache 2

  • Jeśli zwolniony fragment był już zwolniony i jest obecny jako fragment w tcache:

  • Komunikat błędu: free(): double free detected in tcache 2

  • Kontrole w _int_free fast bin:

  • Jeśli rozmiar fragmentu jest nieprawidłowy (za duży lub za mały), wywołaj:

  • Komunikat błędu: free(): invalid next size (fast)

  • Jeśli dodany fragment był już na szczycie fast bin:

  • Komunikat błędu: double free or corruption (fasttop)

  • Jeśli rozmiar fragmentu na szczycie ma inny rozmiar niż dodawany fragment:

  • Komunikat błędu: invalid fastbin entry (free)

_int_free_merge_chunk

  • Sprawdzenia w _int_free_merge_chunk:

  • Jeśli kawałek jest kawałkiem górnym:

  • Komunikat błędu: double free or corruption (top)

  • Jeśli następny kawałek znajduje się poza granicami areny:

  • Komunikat błędu: double free or corruption (out)

  • Jeśli kawałek nie jest oznaczony jako używany (w prev_inuse z następnego kawałka):

  • Komunikat błędu: double free or corruption (!prev)

  • Jeśli następny kawałek ma zbyt mały lub zbyt duży rozmiar:

  • Komunikat błędu: free(): invalid next size (normal)

  • Jeśli poprzedni kawałek nie jest używany, zostanie podjęta próba konsolidacji. Jednak jeśli prev_size różni się od rozmiaru wskazanego w poprzednim kawałku:

  • Komunikat błędu: corrupted size vs. prev_size while consolidating

_int_free_create_chunk

  • Sprawdzenia w _int_free_create_chunk:

  • Dodając kawałek do nieuporządkowanego kubełka, sprawdź, czy unsorted_chunks(av)->fd->bk == unsorted_chunks(av):

  • Komunikat błędu: free(): corrupted unsorted chunks

do_check_malloc_state

  • Sprawdzenia w do_check_malloc_state:

  • Jeśli kawałek fast bin jest źle wyrównany:

  • Komunikat błędu: do_check_malloc_state(): unaligned fastbin chunk detected

malloc_consolidate

  • Sprawdzenia w malloc_consolidate:

  • Jeśli kawałek fast bin jest źle wyrównany:

  • Komunikat błędu: malloc_consolidate(): unaligned fastbin chunk detected

  • Jeśli nieprawidłowy rozmiar kawałka fast bin:

  • Komunikat błędu: malloc_consolidate(): invalid chunk size

_int_realloc

  • Sprawdzenia w _int_realloc:

  • Rozmiar jest zbyt duży lub zbyt mały:

  • Komunikat błędu: realloc(): invalid old size

  • Rozmiar następnego kawałka jest zbyt duży lub zbyt mały:

  • Komunikat błędu: realloc(): invalid next size

Last updated