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

93 lines
6.3 KiB
Markdown
Raw Normal View History

# Verificación de Seguridad de Funciones de Heap
<details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## unlink
Esta función elimina un fragmento de una lista doblemente enlazada. Las verificaciones comunes aseguran que la estructura de la lista enlazada permanezca consistente al desvincular fragmentos.
* **Verificaciones de Consistencia**:
* Verificar si `P->fd->bk == P` y `P->bk->fd == P`.
* Mensaje de error: `corrupted double-linked list`
## \_int\_malloc
Esta función es responsable de asignar memoria desde el heap. Las verificaciones aquí aseguran que la memoria no se corrompa durante la asignación.
* **Verificación de Tamaño de Fastbin**:
* Al eliminar un fragmento de un fastbin, asegúrate de que el tamaño del fragmento esté dentro del rango de fastbin.
* Mensaje de error: `malloc(): memory corruption (fast)`
* **Verificación de Consistencia de Smallbin**:
* Al eliminar un fragmento de un smallbin, asegúrate de que los enlaces previo y siguiente en la lista doblemente enlazada sean consistentes.
* Mensaje de error: `malloc(): smallbin double linked list corrupted`
* **Verificación de Rango de Memoria de Unsorted Bin**:
* Asegúrate de que el tamaño de los fragmentos en el unsorted bin esté dentro de los límites mínimo y máximo.
* Mensaje de error: `malloc(): memory corruption | malloc(): invalid next size (unsorted)`
* **Verificación de Consistencia de Unsorted Bin (Primer Escenario)**:
* Al insertar un fragmento restante en el unsorted bin, verifica si `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
* Mensaje de error: `malloc(): corrupted unsorted chunks`
* **Verificación de Consistencia de Unsorted Bin (Segundo Escenario)**:
* Igual que la verificación anterior, pero se activa al insertar después de dividir un fragmento rápido o pequeño.
* Mensaje de error: `malloc(): corrupted unsorted chunks 2`
## \_int\_free
Esta función libera la memoria previamente asignada. Las verificaciones aquí ayudan a garantizar una correcta liberación de memoria y prevenir la corrupción de memoria.
* **Verificación de Límites del Puntero**:
* Asegúrate de que el puntero que se está liberando no esté envolviendo la memoria.
* Mensaje de error: `free(): invalid pointer`
* **Verificación de Tamaño**:
* Asegúrate de que el tamaño del fragmento que se está liberando sea al menos `MINSIZE` o un múltiplo de `MALLOC_ALIGNMENT`.
* Mensaje de error: `free(): invalid size`
* **Verificación de Tamaño de Fastbin**:
* Para fragmentos de fastbin, asegúrate de que el tamaño del siguiente fragmento esté dentro de los límites mínimo y máximo.
* Mensaje de error: `free(): invalid next size (fast)`
* **Verificación de Doble Liberación en Fastbin**:
* Al insertar un fragmento en un fastbin, asegúrate de que el fragmento en la cabeza no sea el mismo que el que se está insertando.
* Mensaje de error: `double free or corruption (fasttop)`
* **Verificación de Consistencia de Fastbin**:
* Al insertar en un fastbin, asegúrate de que los tamaños del fragmento en la cabeza y el fragmento que se está insertando sean iguales.
* Mensaje de error: `invalid fastbin entry (free)`
* **Verificación de Consistencia de Top Chunk**:
* Para fragmentos que no son de fastbin, asegúrate de que el fragmento no sea el mismo que el top chunk.
* Mensaje de error: `double free or corruption (top)`
* **Verificación de Límites de Memoria**:
* Asegúrate de que el siguiente fragmento por memoria esté dentro de los límites del área.
* Mensaje de error: `double free or corruption (out)`
* **Verificación de Bit Prev\_inuse**:
* Asegúrate de que el bit previo en uso en el siguiente fragmento esté marcado.
* Mensaje de error: `double free or corruption (!prev)`
* **Verificación de Tamaño Normal**:
* Asegúrate de que el tamaño del siguiente fragmento esté dentro de rangos válidos.
* Mensaje de error: `free(): invalid next size (normal)`
* **Verificación de Consistencia de Unsorted Bin**:
* Al insertar un fragmento fusionado en el unsorted bin, verifica si `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)`.
* Mensaje de error: `free(): corrupted unsorted chunks`
<details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>