Heap Functions Security Checks

Вивчайте та практикуйте хакінг AWS: Навчання AWS Red Team Expert (ARTE) від HackTricks Вивчайте та практикуйте хакінг GCP: Навчання GCP Red Team Expert (GRTE) від HackTricks

Підтримайте HackTricks

Для отримання додаткової інформації перегляньте:

unlink

Ось підсумок виконаних перевірок:

  • Перевірте, чи вказаний розмір фрагмента співпадає з prev_size, вказаним у наступному фрагменті

  • Повідомлення про помилку: corrupted size vs. prev_size

  • Також перевірте, що P->fd->bk == P та P->bk->fw == P

  • Повідомлення про помилку: corrupted double-linked list

  • Якщо фрагмент не є малим, перевірте, що P->fd_nextsize->bk_nextsize == P та P->bk_nextsize->fd_nextsize == P

  • Повідомлення про помилку: corrupted double-linked list (not small)

_int_malloc

Для отримання додаткової інформації перегляньте:

malloc & sysmalloc
  • Перевірки під час пошуку швидкого біна:

  • Якщо фрагмент не вирівняний:

  • Повідомлення про помилку: malloc(): unaligned fastbin chunk detected 2

  • Якщо наступний фрагмент не вирівняний:

  • Повідомлення про помилку: malloc(): unaligned fastbin chunk detected

  • Якщо повернутий фрагмент має неправильний розмір через його індекс у швидкому біні:

  • Повідомлення про помилку: malloc(): memory corruption (fast)

  • Якщо будь-який фрагмент, використаний для заповнення tcache, не вирівняний:

  • Повідомлення про помилку: malloc(): unaligned fastbin chunk detected 3

  • Перевірки під час пошуку малого біна:

  • Якщо victim->bk->fd != victim:

  • Повідомлення про помилку: malloc(): smallbin double linked list corrupted

  • Перевірки під час консолідації виконуються для кожного швидкого біну:

  • Якщо фрагмент не вирівняний, викличте:

  • Повідомлення про помилку: malloc_consolidate(): unaligned fastbin chunk detected

  • Якщо розмір фрагмента відрізняється від того, який він повинен мати через індекс:

  • Повідомлення про помилку: malloc_consolidate(): invalid chunk size

  • Якщо попередній фрагмент не використовується, а попередній фрагмент має розмір, відмінний від вказаного prev_chunk:

  • Повідомлення про помилку: corrupted size vs. prev_size in fastbins

  • Перевірки під час пошуку несортованого біна:

  • Якщо розмір фрагмента дивний (занадто малий або занадто великий):

  • Повідомлення про помилку: malloc(): invalid size (unsorted)

  • Якщо розмір наступного фрагмента дивний (занадто малий або занадто великий):

  • Повідомлення про помилку: malloc(): invalid next size (unsorted)

  • Якщо попередній розмір, вказаний наступним фрагментом, відрізняється від розміру фрагмента:

  • Повідомлення про помилку: malloc(): mismatching next->prev_size (unsorted)

  • Якщо не victim->bck->fd == victim або не victim->fd == av (arena):

  • Повідомлення про помилку: malloc(): unsorted double linked list corrupted

  • Оскільки ми завжди перевіряємо останній, його fd повинен завжди вказувати на структуру арени.

  • Якщо наступний фрагмент не вказує, що попередній використовується:

  • Повідомлення про помилку: malloc(): invalid next->prev_inuse (unsorted)

  • Якщо fwd->bk_nextsize->fd_nextsize != fwd:

  • Повідомлення про помилку: malloc(): largebin double linked list corrupted (nextsize)

  • Якщо fwd->bk->fd != fwd:

  • Повідомлення про помилку: malloc(): largebin double linked list corrupted (bk)

  • Перевірки під час пошуку великого біна (за індексом):

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

  • Повідомлення про помилку: malloc(): corrupted unsorted chunks

  • Перевірки під час пошуку великого біна (наступний більший):

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

  • Повідомлення про помилку: malloc(): corrupted unsorted chunks2

  • Перевірки під час використання верхнього фрагмента:

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

  • Повідомлення про помилку: malloc(): corrupted top size

tcache_get_n

  • Перевірки в tcache_get_n:

  • Якщо фрагмент не вирівняний:

  • Повідомлення про помилку: malloc(): unaligned tcache chunk detected

tcache_thread_shutdown

  • Перевірки в tcache_thread_shutdown:

  • Якщо фрагмент не вирівняний:

  • Повідомлення про помилку: tcache_thread_shutdown(): unaligned tcache chunk detected

__libc_realloc

  • Перевірки в __libc_realloc:

  • Якщо старий вказівник не вирівняний або розмір був неправильним:

  • Повідомлення про помилку: realloc(): invalid pointer

_int_free

Для отримання додаткової інформації перегляньте:

free
  • Перевірки на початку _int_free:

  • Вказівник вирівняний:

  • Повідомлення про помилку: free(): invalid pointer

  • Розмір більше, ніж MINSIZE, і розмір також вирівняний:

  • Повідомлення про помилку: free(): invalid size

  • Перевірки в _int_free tcache:

  • Якщо записів більше, ніж mp_.tcache_count:

  • Повідомлення про помилку: free(): too many chunks detected in tcache

  • Якщо запис не вирівняний:

  • Повідомлення про помилку: free(): unaligned chunk detected in tcache 2

  • Якщо вивільнений фрагмент вже був вивільнений і присутній як фрагмент у tcache:

  • Повідомлення про помилку: free(): double free detected in tcache 2

  • Перевірки в _int_free fast bin:

  • Якщо розмір фрагмента недійсний (занадто великий або малий), викличте:

  • Повідомлення про помилку: free(): invalid next size (fast)

  • Якщо доданий фрагмент вже був на вершині швидкого біна:

  • Повідомлення про помилку: double free or corruption (fasttop)

  • Якщо розмір фрагмента на вершині відрізняється від розміру фрагмента, який ми додаємо:

  • Повідомлення про помилку: invalid fastbin entry (free)

_int_free_merge_chunk

  • Перевірки в _int_free_merge_chunk:

  • Якщо блок - верхній блок:

  • Повідомлення про помилку: подвійне вивільнення або пошкодження (верхній блок)

  • Якщо наступний блок знаходиться за межами арени:

  • Повідомлення про помилку: подвійне вивільнення або пошкодження (зовні)

  • Якщо блок не позначений як використаний (в prev_inuse наступного блоку):

  • Повідомлення про помилку: подвійне вивільнення або пошкодження (!prev)

  • Якщо наступний блок має занадто маленький або занадто великий розмір:

  • Повідомлення про помилку: free(): недійсний наступний розмір (звичайний)

  • Якщо попередній блок не використовується, спробує сконсолідувати. Але, якщо prev_size відрізняється від розміру, вказаного в попередньому блоку:

  • Повідомлення про помилку: пошкоджений розмір проти prev_size під час консолідації

_int_free_create_chunk

  • Перевірки в _int_free_create_chunk:

  • Додавання блоку в неупорядкований бін, перевірте, чи unsorted_chunks(av)->fd->bk == unsorted_chunks(av):

  • Повідомлення про помилку: free(): пошкоджені неупорядковані блоки

do_check_malloc_state

  • Перевірки в do_check_malloc_state:

  • Якщо невірно вирівняний швидкий бін-блок:

  • Повідомлення про помилку: do_check_malloc_state(): виявлено невирівняний швидкий бін-блок

malloc_consolidate

  • Перевірки в malloc_consolidate:

  • Якщо невірно вирівняний швидкий бін-блок:

  • Повідомлення про помилку: malloc_consolidate(): виявлено невирівняний швидкий бін-блок

  • Якщо невірний розмір швидкого бін-блоку:

  • Повідомлення про помилку: malloc_consolidate(): недійсний розмір блоку

_int_realloc

  • Перевірки в _int_realloc:

  • Розмір занадто великий або занадто малий:

  • Повідомлення про помилку: realloc(): недійсний старий розмір

  • Розмір наступного блоку занадто великий або занадто малий:

  • Повідомлення про помилку: realloc(): недійсний наступний розмір

Last updated