2024-06-16 09:01:40 +00:00
# Verificações de Segurança das Funções de Heap
2024-07-18 17:36:28 +00:00
{% hint style="success" %}
Aprenda e pratique Hacking AWS:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**Treinamento HackTricks 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" > [**Treinamento HackTricks GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2024-06-16 09:01:40 +00:00
2024-07-18 17:36:28 +00:00
< details >
2024-06-16 09:01:40 +00:00
2024-07-18 17:36:28 +00:00
< summary > Apoie o HackTricks< / summary >
2024-06-16 09:01:40 +00:00
2024-07-18 17:36:28 +00:00
* Verifique os [**planos de assinatura** ](https://github.com/sponsors/carlospolop )!
2024-06-16 09:01:40 +00:00
* **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 )**.**
2024-07-18 17:36:28 +00:00
* **Compartilhe truques de hacking enviando PRs para os repositórios** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) e [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ).
2024-06-16 09:01:40 +00:00
< / details >
2024-07-18 17:36:28 +00:00
{% endhint %}
2024-06-16 09:01:40 +00:00
## unlink
Para mais informações, verifique:
{% content-ref url="unlink.md" %}
[unlink.md ](unlink.md )
{% endcontent-ref %}
2024-07-18 17:36:28 +00:00
Esta é um resumo das verificações realizadas:
2024-06-16 09:01:40 +00:00
* 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`
2024-07-18 17:36:28 +00:00
* **Verificações durante a consolidação** realizadas para cada chunk do fast bin: 
2024-06-16 09:01:40 +00:00
* 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 %}
2024-07-18 17:36:28 +00:00
* **Verificações no início do `_int_free` :**
2024-06-16 09:01:40 +00:00
* Ponteiro está alinhado:
* Mensagem de erro: `free(): invalid pointer`
* Tamanho maior que `MINSIZE` e tamanho também alinhado:
* Mensagem de erro: `free(): invalid size`
2024-07-18 17:36:28 +00:00
* **Verificações no tcache do `_int_free` :**
2024-06-16 09:01:40 +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-07-18 17:36:28 +00:00
* **Verificações no fast bin do `_int_free` :**
2024-06-16 09:01:40 +00:00
* 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`