O que é um Buffer Overflow? Um Guia Prático
Aprenda como buffer overflows funcionam na prática com um exemplo real em C, um diagrama de stack e as ferramentas para ver isso acontecer.
Um buffer overflow ocorre quando um programa escreve mais dados em um bloco de memória de tamanho fixo do que esse bloco consegue armazenar. Os bytes extras vazam para a memória adjacente e, dependendo do que fica ao lado do buffer, você pode corromper variáveis, fazer o programa quebrar ou sequestrar o fluxo de execução completamente. É uma das classes de bug mais antigas em segurança de software e ainda aparece em CTFs, CVEs e firmware embarcado hoje.
O padrão vulnerável
Eis um exemplo clássico em C:
#include <string.h>
void greet(char *name) {
char buffer[64];
strcpy(buffer, name);
}
int main(int argc, char **argv) {
greet(argv[1]);
return 0;
}
strcpy copia a string que você passa para buffer, sem nenhuma verificação de limites. Se argv[1] tiver mais de 64 bytes, a cópia continua além do fim do array. Na stack, buffer fica abaixo de outras variáveis locais, registradores salvos e eventualmente o endereço de retorno que diz à CPU para onde pular após greet() terminar. Sobrescreva esse endereço de retorno com um endereço que você controla e você controla o que executa em seguida.
Por que isso ainda compila e executa
C e C++ não fazem verificação automática de limites em arrays crus. Funções como strcpy, gets, sprintf e strcat escrevem alegremente além do fim de um buffer porque se importam apenas com um terminador nulo ou um tamanho de fonte, não com o tamanho real do destino. Compare com strncpy ou snprintf, que recebem um argumento de tamanho explícito e param aí. A vulnerabilidade não é realmente
Escrito com assistência de IA, revisado e publicado por Michal Pilch (CISSP), Korra Studio.
Esta é uma anotação da base de conhecimento da Korra Studio — a plataforma associa cada tema com mentoria 1-para-1.
Começar gratuitamentearrow_forward