As explorações em arquivos de imagem aproveitam as falhas de saturação de buffer no código de processamento de imagem do sistema operacional. Houve várias falhas significativas encontradas na camada GDI do Windows alguns anos atrás - os patches foram lançados há muito tempo, mas as imagens de exploração ainda estão por aí, seja porque ficaram ou na esperança de atingir uma máquina que ainda não foi corrigida. .
A causa comum de tal falha de segurança é passar dados de imagem entre funções na pilha de chamadas e não verificar corretamente o comprimento máximo dos dados. Isso pode ser explorado por dados construídos de forma inteligente que são superdimensionados e organizados de forma que acabem sobrescrevendo o código no quadro da pilha (sobrescrevendo-o com outro código) ou sobrescrevendo os ponteiros para o código que será usado para chamar outras funções ou como a função chamada retorna ao chamador (sobrescrevendo um ponteiro para apontar para o código de exploração), ou sobrescrevendo os dados de tal forma que faça com que outro buraco seja exposto. O método exato varia dependendo do buraco de segurança em questão.
As CPUs modernas têm uma proteção que interrompe a maioria dessas explorações, se o código suportar isso. Isso funciona pelo programa / biblioteca marcando explicitamente quais de suas páginas são dados e quais são códigos - a CPU então levantará uma exceção se algo no que deveria ser dados (como dados de imagem) tentar ser executado como código. O IIRC Vista e versões anteriores e posteriores do .Net tiveram todas as suas bibliotecas refeitas para suportar essa proteção, e ele é suportado por outros sistemas operacionais também, mas isso não impede todas essas explorações e só funciona se explicitamente ligado (caso contrário, um monte de código antigo seria quebrado).