Heap Functions Security Checks

支持 HackTricks

有关更多信息,请查看:

unlink

这是执行的检查摘要:

  • 检查指定块的大小是否与下一个块中指定的 prev_size 相同

  • 错误消息:corrupted size vs. prev_size

  • 还要检查 P->fd->bk == PP->bk->fw == P

  • 错误消息:corrupted double-linked list

  • 如果块不是小块,请检查 P->fd_nextsize->bk_nextsize == PP->bk_nextsize->fd_nextsize == P

  • 错误消息:corrupted double-linked list (not small)

_int_malloc

有关更多信息,请查看:

malloc & sysmalloc
  • 快速 bin 搜索期间的检查:

  • 如果块未对齐:

  • 错误消息:malloc(): unaligned fastbin chunk detected 2

  • 如果前向块未对齐:

  • 错误消息:malloc(): unaligned fastbin chunk detected

  • 如果返回的块大小不正确,因为它在快速 bin 中的索引不正确:

  • 错误消息:malloc(): memory corruption (fast)

  • 如果用于填充 tcache 的任何块未对齐:

  • 错误消息:malloc(): unaligned fastbin chunk detected 3

  • 小 bin 搜索期间的检查:

  • 如果 victim->bk->fd != victim

  • 错误消息:malloc(): smallbin double linked list corrupted

  • 合并期间的检查 对每个快速 bin 块执行:

  • 如果块未对齐触发:

  • 错误消息:malloc_consolidate(): unaligned fastbin chunk detected

  • 如果块的大小与应有的大小不同,因为它在索引中的位置不正确:

  • 错误消息:malloc_consolidate(): invalid chunk size

  • 如果前一个块未被使用且前一个块的大小与 prev_chunk 指示的大小不同:

  • 错误消息:corrupted size vs. prev_size in fastbins

  • 未排序 bin 搜索期间的检查

  • 如果块大小异常(太小或太大):

  • 错误消息: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 应始终指向 arena 结构。

  • 如果下一个块未指示前一个块正在使用:

  • 错误消息: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)

  • 按索引搜索大 bin 期间的检查:

  • bck->fd-> bk != bck

  • 错误消息:malloc(): corrupted unsorted chunks

  • 按下一个更大的搜索大 bin 期间的检查:

  • 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 快速 bin 中的检查:

  • 如果块的大小无效(太大或太小)触发:

  • 错误消息:free(): invalid next size (fast)

  • 如果添加的块已经是快速 bin 的顶部:

  • 错误消息:double free or corruption (fasttop)

  • 如果顶部的块大小与我们要添加的块的大小不同:

  • 错误消息:invalid fastbin entry (free)

_int_free_merge_chunk

  • _int_free_merge_chunk中的检查:

  • 如果块是顶部块:

  • 错误消息: double free or corruption (top)

  • 如果下一个块超出了arena的边界:

  • 错误消息: double free or corruption (out)

  • 如果块未标记为已使用(在下一个块的prev_inuse中):

  • 错误消息: double free or corruption (!prev)

  • 如果下一个块的大小太小或太大:

  • 错误消息: free(): invalid next size (normal)

  • 如果前一个块未被使用,将尝试合并。但是,如果prev_size与前一个块中指示的大小不同:

  • 错误消息: corrupted size vs. prev_size while consolidating

_int_free_create_chunk

  • _int_free_create_chunk中的检查:

  • 将一个块添加到未排序的bin中,检查unsorted_chunks(av)->fd->bk == unsorted_chunks(av):

  • 错误消息: free(): corrupted unsorted chunks

do_check_malloc_state

  • do_check_malloc_state中的检查:

  • 如果未对齐的快速bin块:

  • 错误消息: do_check_malloc_state(): unaligned fastbin chunk detected

malloc_consolidate

  • malloc_consolidate中的检查:

  • 如果未对齐的快速bin块:

  • 错误消息: malloc_consolidate(): unaligned fastbin chunk detected

  • 如果不正确的快速bin块大小:

  • 错误消息: malloc_consolidate(): invalid chunk size

_int_realloc

  • _int_realloc中的检查:

  • 大小太大或太小:

  • 错误消息: realloc(): invalid old size

  • 下一个块的大小太大或太小:

  • 错误消息: realloc(): invalid next size

Last updated