2024-12-12 12:56:11 +00:00
# Verificações de Segurança das Funções de Heap
{% hint style="success" %}
2024-12-14 21:30:33 +00:00
Aprenda e pratique Hacking AWS:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
Aprenda e pratique Hacking GCP: < img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2024-12-12 12:56:11 +00:00
< details >
2024-12-14 21:30:33 +00:00
< summary > Support HackTricks< / summary >
2024-12-12 12:56:11 +00:00
2024-12-14 21:30:33 +00:00
* Confira os [**planos de assinatura** ](https://github.com/sponsors/carlospolop )!
* **Junte-se ao** 💬 [**grupo do Discord** ](https://discord.gg/hRep4RUj7f ) ou ao [**grupo do telegram** ](https://t.me/peass ) ou **siga** -nos no **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) e [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) repositórios do github.
2024-12-12 12:56:11 +00:00
< / details >
{% endhint %}
## unlink
2024-12-14 21:30:33 +00:00
Para mais informações, consulte:
2024-12-12 12:56:11 +00:00
{% content-ref url="unlink.md" %}
[unlink.md ](unlink.md )
{% endcontent-ref %}
2024-12-14 21:30:33 +00:00
Este é um resumo das verificações realizadas:
2024-12-12 12:56:11 +00:00
2024-12-14 21:30:33 +00:00
* Verifique se o tamanho indicado do chunk é o mesmo que o `prev_size` indicado no próximo chunk
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `corrupted size vs. prev_size`
2024-12-14 21:30:33 +00:00
* Verifique também se `P->fd->bk == P` e `P->bk->fw == P`
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `corrupted double-linked list`
2024-12-14 21:30:33 +00:00
* Se o chunk não for pequeno, verifique se `P->fd_nextsize->bk_nextsize == P` e `P->bk_nextsize->fd_nextsize == P`
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `corrupted double-linked list (not small)`
## \_int\_malloc
2024-12-14 21:30:33 +00:00
Para mais informações, consulte:
2024-12-12 12:56:11 +00:00
{% content-ref url="malloc-and-sysmalloc.md" %}
[malloc-and-sysmalloc.md ](malloc-and-sysmalloc.md )
{% endcontent-ref %}
2024-12-14 21:30:33 +00:00
* **Verificações durante a busca em fast bin:**
2024-12-12 12:56:11 +00:00
* Se o chunk estiver desalinhado:
* Mensagem de erro: `malloc(): unaligned fastbin chunk detected 2`
2024-12-14 21:30:33 +00:00
* Se o chunk para frente estiver desalinhado:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `malloc(): unaligned fastbin chunk detected`
2024-12-14 21:30:33 +00:00
* Se o chunk retornado tiver um tamanho que não está correto por causa de seu índice no fast bin:
2024-12-12 12:56:11 +00:00
* 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`
2024-12-14 21:30:33 +00:00
* **Verificações durante a busca em small bin:**
2024-12-12 12:56:11 +00:00
* Se `victim->bk->fd != victim` :
* Mensagem de erro: `malloc(): smallbin double linked list corrupted`
2024-12-14 21:30:33 +00:00
* **Verificações durante a consolidação** realizadas para cada chunk de fast bin: 
* Se o chunk estiver desalinhado, acione:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `malloc_consolidate(): unaligned fastbin chunk detected`
2024-12-14 21:30:33 +00:00
* Se o chunk tiver um tamanho diferente do que deveria por causa do índice em que está:
2024-12-12 12:56:11 +00:00
* 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`
2024-12-14 21:30:33 +00:00
* **Verificações durante a busca em unsorted bin**:
* Se o tamanho do chunk for estranho (muito pequeno ou muito grande): 
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `malloc(): invalid size (unsorted)`
2024-12-14 21:30:33 +00:00
* Se o tamanho do próximo chunk for estranho (muito pequeno ou muito grande):
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `malloc(): invalid next size (unsorted)`
2024-12-14 21:30:33 +00:00
* Se o tamanho anterior indicado pelo próximo chunk difere do tamanho do chunk:
2024-12-12 12:56:11 +00:00
* 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`
2024-12-14 21:30:33 +00:00
* Como estamos sempre verificando o último, seu fd deve sempre apontar para a estrutura da arena.
* Se o próximo chunk não indicar que o anterior está em uso:
2024-12-12 12:56:11 +00:00
* 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)`
2024-12-14 21:30:33 +00:00
* **Verificações durante a busca em large bin (por índice):**
2024-12-12 12:56:11 +00:00
* `bck->fd-> bk != bck` :
* Mensagem de erro: `malloc(): corrupted unsorted chunks`
2024-12-14 21:30:33 +00:00
* **Verificações durante a busca em large bin (próximo maior):**
2024-12-12 12:56:11 +00:00
* `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`
2024-12-14 21:30:33 +00:00
Para mais informações, consulte:
2024-12-12 12:56:11 +00:00
{% content-ref url="free.md" %}
[free.md ](free.md )
{% endcontent-ref %}
2024-12-14 21:30:33 +00:00
* **Verificações durante o início de `_int_free` :**
* O ponteiro está alinhado:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `free(): invalid pointer`
* Tamanho maior que `MINSIZE` e tamanho também alinhado:
* Mensagem de erro: `free(): invalid size`
2024-12-14 21:30:33 +00:00
* **Verificações em `_int_free` tcache:**
2024-12-12 12:56:11 +00:00
* 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`
2024-12-14 21:30:33 +00:00
* **Verificações em `_int_free` fast bin:**
* Se o tamanho do chunk for inválido (muito grande ou pequeno), acione:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `free(): invalid next size (fast)`
2024-12-14 21:30:33 +00:00
* Se o chunk adicionado já era o topo do fast bin:
2024-12-12 12:56:11 +00:00
* 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)`
2024-12-14 21:30:33 +00:00
2024-12-12 12:56:11 +00:00
## **`_int_free_merge_chunk`**
* **Verificações em `_int_free_merge_chunk` :**
2024-12-14 21:30:33 +00:00
* Se o chunk for o top chunk:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `double free or corruption (top)`
2024-12-14 21:30:33 +00:00
* Se o próximo chunk estiver fora dos limites da arena:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `double free or corruption (out)`
2024-12-14 21:30:33 +00:00
* Se o chunk não estiver marcado como usado (no prev\_inuse do chunk seguinte):
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `double free or corruption (!prev)`
2024-12-14 21:30:33 +00:00
* Se o próximo chunk tiver um tamanho muito pequeno ou muito grande:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `free(): invalid next size (normal)`
2024-12-14 21:30:33 +00:00
* Se o chunk anterior não estiver em uso, ele tentará consolidar. Mas, se o `prev_size` diferir do tamanho indicado no chunk anterior:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `corrupted size vs. prev_size while consolidating`
## **`_int_free_create_chunk`**
* **Verificações em `_int_free_create_chunk` :**
2024-12-14 21:30:33 +00:00
* Adicionando um chunk no unsorted bin, verifique se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)` :
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `free(): corrupted unsorted chunks`
## `do_check_malloc_state`
* **Verificações em `do_check_malloc_state` :**
2024-12-14 21:30:33 +00:00
* Se o fast bin chunk estiver desalinhado:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `do_check_malloc_state(): unaligned fastbin chunk detected`
## `malloc_consolidate`
* **Verificações em `malloc_consolidate` :**
2024-12-14 21:30:33 +00:00
* Se o fast bin chunk estiver desalinhado:
2024-12-12 12:56:11 +00:00
* Mensagem de erro: `malloc_consolidate(): unaligned fastbin chunk detected`
2024-12-14 21:30:33 +00:00
* Se o tamanho do fast bin chunk estiver incorreto:
2024-12-12 12:56:11 +00:00
* 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`
2024-12-14 21:30:33 +00:00
{% hint style="success" %}
Aprenda e pratique Hacking AWS:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
Aprenda e pratique Hacking GCP: < img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
< details >
< summary > Support HackTricks< / summary >
* Confira os [**planos de assinatura** ](https://github.com/sponsors/carlospolop )!
* **Junte-se ao** 💬 [**grupo do Discord** ](https://discord.gg/hRep4RUj7f ) ou ao [**grupo do telegram** ](https://t.me/peass ) ou **siga** -nos no **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) e [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) repositórios do github.
< / details >
{% endhint %}