Buffer overflow
O que é Buffer overflow?
Buffer overflowFalha de segurança de memória em que um programa escreve para além do fim de um buffer alocado, corrompendo memória adjacente e permitindo frequentemente execução de código.
Os buffer overflows ocorrem quando os comprimentos de entrada não são devidamente limitados em relação ao tamanho do buffer de destino, em linguagens como C e C++. Os bytes excedentes sobrescrevem stack frames adjacentes, chunks de heap, ponteiros de função ou endereços de retorno, permitindo que atacantes desviem o fluxo de controlo ou vazem dados. Um stack smash clássico sobrescreve o endereço de retorno guardado, de modo que a função "retorna" para shellcode fornecido pelo atacante; os heap overflows, em vez disso, corrompem metadados do alocador ou objetos adjacentes para obter uma primitiva de escrita.
Este padrão moldou a história da internet. O Morris Worm de 1988 propagou-se através de um stack overflow no fingerd do BSD; o Code Red (2001) abusou de um buffer não verificado no filtro ISAPI .ida do IIS (CVE-2001-0500); e o SQL Slammer (2003) explorou o overflow do SQL Server Resolution Service (MS02-039 / CVE-2002-0649), infetando cerca de 75.000 hosts em dez minutos através de um único pacote UDP de 404 bytes para a porta 1434 — seis meses após o lançamento do patch.
A escrita fora dos limites (out-of-bounds write, CWE-787) ficou em #2 no CWE Top 25 de 2024, atrás apenas do XSS. As mitigações modernas combinam canários de pilha, ASLR, DEP/NX, Control-Flow Integrity (Intel CET, ARM PAC/BTI), funções libc mais seguras, hardening de compilador (_FORTIFY_SOURCE), testes de fuzzing e — cada vez mais — a migração de código crítico para linguagens com segurança de memória como Rust.
flowchart TD
A[Atacante envia entrada sobredimensionada] --> B{Comprimento verificado<br/>contra o tamanho do buffer?}
B -->|Sim, limitado| C[Entrada truncada / rejeitada]
B -->|Sem verificação de limites| D[Escrita para além do fim do buffer]
D --> E[Sobrescreve o endereço de retorno<br/>ou ponteiro de função]
E --> F[Fluxo de controlo redirecionado]
F --> G[Shellcode do atacante / cadeia ROP executa]
C --> H[Programa continua em segurança]● Exemplos
- 01
CVE-2014-0160 (Heartbleed): overflow de leitura de memória no OpenSSL.
- 02
Worm Morris (1988): explorou um overflow de pilha no fingerd.
● Perguntas frequentes
O que é Buffer overflow?
Falha de segurança de memória em que um programa escreve para além do fim de um buffer alocado, corrompendo memória adjacente e permitindo frequentemente execução de código. Pertence à categoria Vulnerabilidades da cibersegurança.
O que significa Buffer overflow?
Falha de segurança de memória em que um programa escreve para além do fim de um buffer alocado, corrompendo memória adjacente e permitindo frequentemente execução de código.
Como se defender contra Buffer overflow?
As defesas contra Buffer overflow costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Buffer overflow?
Nomes alternativos comuns: Sobreposição de buffer.