Heap overflow
# Heap overflow

Um heap overflow é um tipo de buffer overflow que ocorre na heap. Overflows na heap são explorados de maneira diferente de overflows na pilha (stack overflow). Os dados na heap são alocados dinamicamente pela aplicação, em tempo de execução, e, tipicamente, contém dados do programa. A exploração é feita corrompendo estes dados de uma maneira específica para causar sobrescrita em estruturas internas da aplicação, como listas de ponteiros.
Em regra, a técnica de heap overflow sobrescreve links da memória de alocação dinâmica, e substitui por um ponteiro de função de chamada de um programa.

## Consequências

Um acidental overflow pode resultar em corrompimento de dados ou comportamento não esperado por um processo que usa uma região de memória afetada. Em sistemas operacionais sem proteção de memória, isto poderia ser qualquer processo no sistema.
Um exploit executado pode resultar em dados de um local específico sendo alterados de maneira arbitrária, ou código arbitrário sendo executado.
A vulnerabilidade Microsoft JPEG GDI+ MS04-028 é um exemplo do perigo que a heap overflow pode representar para o computador.
* Jailbreakfrequentemente usa heap overflows para injetar código arbitrário.

## Detecção e prevenção

Desde a versão 2.3.6 o GNU libc inclui proteções que podem detectar heap overflows. Entretanto, estas proteções atuam contra velhas maneiras de explorer o heap overflow, e não funcionam perfeitamente.
O sistema operacional Microsoft Windows implementa proteções contra heap overflow desde Windows XP SP2. Ele também pode atenuar essas ameaças atraves da utilização de Data Execution Prevention (DEP) and ASLR.