hacktricks/binary-exploitation/heap/heap-functions-security-checks.md

92 lines
6.1 KiB
Markdown

# Controlli di sicurezza delle funzioni di heap
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la **tua azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details>
## unlink
Questa funzione rimuove un chunk da una lista doppiamente collegata. I controlli comuni garantiscono che la struttura della lista collegata rimanga consistente durante lo scollegamento dei chunk.
* **Controlli di coerenza**:
* Verifica se `P->fd->bk == P` e `P->bk->fd == P`.
* Messaggio di errore: `corrupted double-linked list`
## \_int\_malloc
Questa funzione è responsabile dell'allocazione di memoria dall'heap. I controlli qui garantiscono che la memoria non venga corrotta durante l'allocazione.
* **Controllo della dimensione di Fastbin**:
* Quando si rimuove un chunk da un fastbin, assicurarsi che la dimensione del chunk sia nell'intervallo del fastbin.
* Messaggio di erroro: `malloc(): memory corruption (fast)`
* **Controllo di coerenza di Smallbin**:
* Quando si rimuove un chunk da un smallbin, assicurarsi che i collegamenti precedente e successivo nella lista doppiamente collegata siano coerenti.
* Messaggio di errore: `malloc(): smallbin double linked list corrupted`
* **Controllo dell'intervallo di memoria di Unsorted Bin**:
* Assicurarsi che la dimensione dei chunk nell'unsorted bin sia compresa nei limiti minimi e massimi.
* Messaggio di errore: `malloc(): memory corruption | malloc(): invalid next size (unsorted)`
* **Controllo di coerenza di Unsorted Bin (Primo Scenario)**:
* Quando si inserisce un chunk di resto nell'unsorted bin, controllare se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
* Messaggio di errore: `malloc(): corrupted unsorted chunks`
* **Controllo di coerenza di Unsorted Bin (Secondo Scenario)**:
* Come il controllo precedente, ma attivato quando si inserisce dopo aver diviso un chunk veloce o piccolo.
* Messaggio di errore: `malloc(): corrupted unsorted chunks 2`
## \_int\_free
Questa funzione libera la memoria precedentemente allocata. I controlli qui aiutano a garantire una corretta deallocazione della memoria e a prevenire la corruzione della memoria.
* **Controllo dei limiti del puntatore**:
* Assicurarsi che il puntatore liberato non si avvolga attorno alla memoria.
* Messaggio di errore: `free(): invalid pointer`
* **Controllo della dimensione**:
* Assicurarsi che la dimensione del chunk liberato sia almeno `MINSIZE` o un multiplo di `MALLOC_ALIGNMENT`.
* Messaggio di errore: `free(): invalid size`
* **Controllo della dimensione di Fastbin**:
* Per i chunk fastbin, assicurarsi che la dimensione del chunk successivo sia nei limiti minimi e massimi.
* Messaggio di errore: `free(): invalid next size (fast)`
* **Controllo di Double Free di Fastbin**:
* Quando si inserisce un chunk in un fastbin, assicurarsi che il chunk in testa non sia lo stesso di quello inserito.
* Messaggio di errore: `double free or corruption (fasttop)`
* **Controllo di coerenza di Fastbin**:
* Quando si inserisce in un fastbin, assicurarsi che le dimensioni del chunk in testa e del chunk inserito siano uguali.
* Messaggio di errore: `invalid fastbin entry (free)`
* **Controllo di coerenza del Top Chunk**:
* Per i chunk non fastbin, assicurarsi che il chunk non sia lo stesso del top chunk.
* Messaggio di errore: `double free or corruption (top)`
* **Controllo dei limiti di memoria**:
* Assicurarsi che il chunk successivo per memoria sia nei limiti dell'arena.
* Messaggio di errore: `double free or corruption (out)`
* **Controllo del bit Prev\_inuse**:
* Assicurarsi che il bit precedente-in-uso nel chunk successivo sia contrassegnato.
* Messaggio di errore: `double free or corruption (!prev)`
* **Controllo della dimensione normale**:
* Assicurarsi che la dimensione del chunk successivo sia nei range validi.
* Messaggio di errore: `free(): invalid next size (normal)`
* **Controllo di coerenza di Unsorted Bin**:
* Quando si inserisce un chunk fuso nell'unsorted bin, controllare se `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
* Messaggio di errore: `free(): corrupted unsorted chunks`
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la **tua azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details>