Heap Functions Security Checks
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS: Навчання AWS Red Team Expert (ARTE) від HackTricks Вивчайте та практикуйте хакінг GCP: Навчання GCP Red Team Expert (GRTE) від 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)
Для отримання додаткової інформації перегляньте:
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(): недійсний наступний розмір