# Verificações de Segurança das Funções de Heap
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras maneiras de apoiar o HackTricks: * Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
## unlink Para mais informações, verifique: {% content-ref url="unlink.md" %} [unlink.md](unlink.md) {% endcontent-ref %} Este é um resumo das verificações realizadas: * Verificar se o tamanho indicado do chunk é o mesmo que o `prev_size` indicado no próximo chunk * Mensagem de erro: `corrupted size vs. prev_size` * Verificar também se `P->fd->bk == P` e `P->bk->fw == P` * Mensagem de erro: `corrupted double-linked list` * Se o chunk não é pequeno, verificar se `P->fd_nextsize->bk_nextsize == P` e `P->bk_nextsize->fd_nextsize == P` * Mensagem de erro: `corrupted double-linked list (not small)` ## \_int\_malloc Para mais informações, verifique: {% content-ref url="malloc-and-sysmalloc.md" %} [malloc-and-sysmalloc.md](malloc-and-sysmalloc.md) {% endcontent-ref %} * **Verificações durante a busca de fast bin:** * Se o chunk estiver desalinhado: * Mensagem de erro: `malloc(): unaligned fastbin chunk detected 2` * Se o chunk à frente estiver desalinhado: * Mensagem de erro: `malloc(): unaligned fastbin chunk detected` * Se o chunk retornado tiver um tamanho incorreto devido ao seu índice no fast bin: * Mensagem de erro: `malloc(): memory corruption (fast)` * Se algum chunk usado para preencher o tcache estiver desalinhado: * Mensagem de erro: `malloc(): unaligned fastbin chunk detected 3` * **Verificações durante a busca de small bin:** * Se `victim->bk->fd != victim`: * Mensagem de erro: `malloc(): smallbin double linked list corrupted` * **Verificações durante a consolidação** realizadas para cada chunk de fast bin: * Se o chunk estiver desalinhado, acionar: * Mensagem de erro: `malloc_consolidate(): unaligned fastbin chunk detected` * Se o chunk tiver um tamanho diferente do que deveria devido ao índice em que está: * Mensagem de erro: `malloc_consolidate(): invalid chunk size` * Se o chunk anterior não estiver em uso e o chunk anterior tiver um tamanho diferente do indicado por prev\_chunk: * Mensagem de erro: `corrupted size vs. prev_size in fastbins` * **Verificações durante a busca de unsorted bin**: * Se o tamanho do chunk estiver estranho (muito pequeno ou muito grande): * Mensagem de erro: `malloc(): invalid size (unsorted)` * Se o tamanho do próximo chunk estiver estranho (muito pequeno ou muito grande): * Mensagem de erro: `malloc(): invalid next size (unsorted)` * Se o tamanho anterior indicado pelo próximo chunk diferir do tamanho do chunk: * Mensagem de erro: `malloc(): mismatching next->prev_size (unsorted)` * Se não `victim->bck->fd == victim` ou não `victim->fd == av (arena)`: * Mensagem de erro: `malloc(): unsorted double linked list corrupted` * Como sempre estamos verificando o último, seu fd deve estar sempre apontando para a estrutura da arena. * Se o próximo chunk não estiver indicando que o anterior está em uso: * Mensagem de erro: `malloc(): invalid next->prev_inuse (unsorted)` * Se `fwd->bk_nextsize->fd_nextsize != fwd`: * Mensagem de erro: `malloc(): largebin double linked list corrupted (nextsize)` * Se `fwd->bk->fd != fwd`: * Mensagem de erro: `malloc(): largebin double linked list corrupted (bk)` * **Verificações durante a busca de large bin (por índice):** * `bck->fd-> bk != bck`: * Mensagem de erro: `malloc(): corrupted unsorted chunks` * **Verificações durante a busca de large bin (próximo maior):** * `bck->fd-> bk != bck`: * Mensagem de erro: `malloc(): corrupted unsorted chunks2` * **Verificações durante o uso do Top chunk:** * `chunksize(av->top) > av->system_mem`: * Mensagem de erro: `malloc(): corrupted top size` ## `tcache_get_n` * **Verificações em `tcache_get_n`:** * Se o chunk estiver desalinhado: * Mensagem de erro: `malloc(): unaligned tcache chunk detected` ## `tcache_thread_shutdown` * **Verificações em `tcache_thread_shutdown`:** * Se o chunk estiver desalinhado: * Mensagem de erro: `tcache_thread_shutdown(): unaligned tcache chunk detected` ## `__libc_realloc` * **Verificações em `__libc_realloc`:** * Se o ponteiro antigo estiver desalinhado ou o tamanho estiver incorreto: * Mensagem de erro: `realloc(): invalid pointer` ## `_int_free` Para mais informações, verifique: {% content-ref url="free.md" %} [free.md](free.md) {% endcontent-ref %} * **Verificações durante o início do `_int_free`:** * Ponteiro está alinhado: * Mensagem de erro: `free(): invalid pointer` * Tamanho maior que `MINSIZE` e tamanho também alinhado: * Mensagem de erro: `free(): invalid size` * **Verificações no tcache de `_int_free`:** * Se houver mais entradas do que `mp_.tcache_count`: * Mensagem de erro: `free(): too many chunks detected in tcache` * Se a entrada não estiver alinhada: * Mensagem de erro: `free(): unaligned chunk detected in tcache 2` * Se o chunk liberado já foi liberado e está presente como chunk no tcache: * Mensagem de erro: `free(): double free detected in tcache 2` * **Verificações no fast bin de `_int_free`:** * Se o tamanho do chunk for inválido (muito grande ou pequeno) acionar: * Mensagem de erro: `free(): invalid next size (fast)` * Se o chunk adicionado já estiver no topo do fast bin: * Mensagem de erro: `double free or corruption (fasttop)` * Se o tamanho do chunk no topo tiver um tamanho diferente do chunk que estamos adicionando: * Mensagem de erro: `invalid fastbin entry (free)` ## **`_int_free_merge_chunk`** * **Verificações em `_int_free_merge_chunk`:** * Se o chunk é o chunk superior: * Mensagem de erro: `double free or corruption (top)` * Se o próximo chunk está fora dos limites da arena: * Mensagem de erro: `double free or corruption (out)` * Se o chunk não está marcado como usado (no prev\_inuse do chunk seguinte): * Mensagem de erro: `double free or corruption (!prev)` * Se o próximo chunk tem um tamanho muito pequeno ou muito grande: * Mensagem de erro: `free(): invalid next size (normal)` * Se o chunk anterior não está em uso, ele tentará consolidar. Mas, se o `prev_size` difere do tamanho indicado no chunk anterior: * Mensagem de erro: `corrupted size vs. prev_size while consolidating` ## **`_int_free_create_chunk`** * **Verificações em `_int_free_create_chunk`:** * Ao adicionar um chunk no bin não ordenado, verificar se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`: * Mensagem de erro: `free(): corrupted unsorted chunks` ## `do_check_malloc_state` * **Verificações em `do_check_malloc_state`:** * Se o chunk do fast bin estiver desalinhado: * Mensagem de erro: `do_check_malloc_state(): unaligned fastbin chunk detected` ## `malloc_consolidate` * **Verificações em `malloc_consolidate`:** * Se o chunk do fast bin estiver desalinhado: * Mensagem de erro: `malloc_consolidate(): unaligned fastbin chunk detected` * Se o tamanho do chunk do fast bin estiver incorreto: * Mensagem de erro: `malloc_consolidate(): invalid chunk size` ## `_int_realloc` * **Verificações em `_int_realloc`:** * Tamanho é muito grande ou muito pequeno: * Mensagem de erro: `realloc(): invalid old size` * Tamanho do próximo chunk é muito grande ou muito pequeno: * Mensagem de erro: `realloc(): invalid next size`