Format String
Exploração de Vulnerabilidade de String de Formato
Uma vulnerabilidade de string de formato ocorre quando a entrada do usuário é passada diretamente para funções de formatação como printf, fprintf, sprintf e similares, sem especificar corretamente a string de formato.
Fundamentos
Funções como printf esperam uma string de formato que define como os argumentos subsequentes devem ser interpretados e exibidos. Por exemplo:
printf("%s", user_input);é seguro, pois especifica que user_input deve ser tratado como string (%s).
Já:
printf(user_input);é inseguro, porque se user_input contiver especificadores de formato (como %x, %n), o printf tentará ler argumentos inexistentes da pilha, causando vazamento de informações ou corrupção de memória.
Impacto
Vazamento de memória:
%x,%pe similares permitem ler valores arbitrários da pilha.Escrita arbitrária:
%nescreve o número de caracteres impressos até aquele ponto no endereço indicado.Execução arbitrária de código: combinando escrita controlada em endereços estratégicos.
Exemplo de vazamento
Se user_input = "%x %x %x %x", o printf imprimirá quatro valores da pilha.
Exemplo de escrita
Isso escreverá o número de caracteres impressos até o momento no endereço de target.
Exploração tÃpica
Identificar vulnerabilidade
Inserir
%xrepetidamente até ver dados sensÃveis na saÃda.
Descobrir offset
Contar quantos
%xsão necessários até alcançar o endereço/alvo.
Manipular escrita
Usar
%npara escrever valores especÃficos em endereços de interesse.
Exploração avançada
Alterar ponteiros de função (GOT/PLT) ou variáveis de controle para redirecionar execução.
Proteções comuns
FORTIFY_SOURCE: adiciona verificações extras de segurança.
Format String Warnings: compiladores modernos alertam sobre uso inseguro de
printf.ASLR/DEP/PIE: dificultam exploração, mas não previnem completamente.
Mitigação
Sempre especificar a string de formato explicitamente.
Usar funções seguras (
snprintf,strncpy).Validar/filtrar entrada do usuário.
Essa vulnerabilidade é poderosa porque pode ser explorada tanto para vazamento de informações quanto para execução arbitrária de código, dependendo do contexto e das proteções presentes.
Atualizado