Stack overflow

eccessiva richiesta di memoria in un sistema informatico

Uno "stack overflow" (inteso come "attacco" informatico) è una delle tecniche base di exploit più semplici, dalla quale esistono vari tipi di protezione (vedi PaX). Lo stack, nella memoria, è l'area dedicata alle informazioni relative all'esecuzione delle funzioni e alla manipolazione dei dati tra e dentro di esse. Esso è suddiviso in vari "frame", così arrangiati: ad ogni chiamata di funzione, viene eseguito un push nello stack degli argomenti della funzione, seguito da una copia del registro EIP (il puntatore alle istruzioni) e da una copia del registro EBP (il puntatore alla base dello stack-frame corrente - vedi IA32), al quale si fa puntare il nuovo EBP. A questo punto, nella funzione chiamata, il sistema alloca staticamente la memoria per le nuove variabili locali; se una di queste variabili può essere "riempita" con dati provenienti - direttamente o indirettamente - da un "input" sul quale non vi sono controlli sulla dimensione, è possibile sovrascrivere i dati che stanno nelle locazioni di memoria inferiori, ovvero, in ordine, eventuali altre variabili locali, la copia del vecchio stack pointer (ESP) e, quindi, la copia del vecchio instruction pointer. L'obiettivo è quello di inserirvi l'indirizzo di un altro segmento di codice. Si ha quindi la possibilità di esecuzione di codice arbitrario al momento del ritorno alla funzione chiamante; tale codice girerà sulla macchina con i diritti del processo che lo ha avviato.