L’heap overflow è una particolare categoria di attacchi buffer overflow particolarmente insidiosa e difficile da individuare. Di recente, è stata anche individuata una vulnerabilità all’interno di alcune distribuzioni Linux, con la quale eseguire attacchi heap overflow.
Dunque, vediamo nel dettaglio cos’è un heap overflow, in che modo può essere eseguito e come ci si può difendere da esso.

Gli attacchi buffer overflow
Il buffer overflow consiste nel compromettere il buffer di un dispositivo, un’area di memoria temporanea, mandandolo in overflow. Al suo interno vengono caricati dati che possiedono dimensioni maggiori della capacità di memoria del buffer stesso. I dati in eccesso vanno poi a sovrascrivere quelli salvati nelle locazioni di memoria contigue.
Il buffer overflow viene usato per:
- Ottenere un accesso non autorizzato alla macchina compromessa;
- Bloccare l’esecuzione di specifici programmi;
- Iniettare del codice malevolo all’interno del dispositivo;
- Eseguire un arbitrary code execution.
Cos’è l’heap overflow
L’heap è un’area della memoria utilizzata per gestire in modo dinamico l’allocazione e la deallocazione di dati durante l’esecuzione di un programma. A differenza dello stack, che ha una dimensione fissa e adotta il modello last-in-first-out (LIFO), l’heap ha una struttura più flessibile. Infatti, è composto da diverse aree di memoria, chiamate chunk, non necessariamente adiacenti tra loro. Per questo motivo, l’heap può allocare e liberare la memoria dinamicamente e senza uno specifico ordine durante l’esecuzione di un programma.
In un heap overflow, gli attaccanti cercano di compromettere il buffer situato all’interno dell’heap. Come per il buffer overflow, vengono inseriti dati che superano la dimensione stabilita per la porzione di memoria allocata dinamicamente. I dati inseriti sovrascrivono quelli salvati in precedenza, compromettendo la memoria e causando diversi crash del dispositivo, che non sempre si verificano immediatamente.
I vari metodi per eseguire un attacco heap overflow
Esistono diversi modi con cui si può eseguire un heap overflow. Vediamo i due maggiormente impiegati.
Il primo metodo di attacco heap overflow consiste nel far allocare ad un programma più memoria di quanto sia necessaria, per poi inserire del codice malevolo nella memoria in eccesso. L’operazione viene eseguita utilizzando input progettati appositamente per mandare in overflow il buffer presente nell’heap.
Il secondo metodo, invece, permette di compromettere le strutture dati che vengono utilizzate per gestire l’heap. In questo modo un attaccante è in grado di ottenere il pieno controllo sul flusso di esecuzione di un programma e di eseguire un arbitrary code execution. È possibile eseguire un attacco anche ai metadati presenti nell’heap. Questi metadati contengono informazioni sui vari chunk che costituiscono l’heap, tra cui:
- Le dimensioni di ogni chunk;
- Il chunk precedente;
- Il chunk successivo;
- Se il chunk è utilizzato o meno.
Attraverso queste informazioni è possibile sfruttare a proprio vantaggio gli algoritmi utilizzati dall’heap. Tuttavia, si tratta di un’operazione piuttosto complessa da eseguire.
Cos’è l’heap FengShui
L’heap FengShui è una tecnica usata per manipolare la disposizione dei chunk, creando così vulnerabilità che gli attaccanti possono sfruttare. In particolare, l’heap FengShui viene utilizzato principalmente per eseguire un arbitrary code execution.
Questa tecnica trae ispirazione dal feng shui, uno stile di arredamento che consiste nel disporre i propri mobili in diversi punti della stanza in base a specifici criteri.
Infatti, gli attaccanti cercano di influenzare la configurazione dell’heap, attraverso continue operazioni di allocazione e deallocazione dei chunk di memoria. Ad esempio, questo tipo di heap si può utilizzare per controllare il posizionamento di dati sensibili, o di puntatori, a specifiche funzioni di un programma.
L’heap overflow nei sistemi Linux
Nel gennaio 2024, il team di cybersecurity di Qualys ha scoperto una vulnerabilità presente in alcune versioni della GNU C Library, sfruttabile per eseguire attacchi heap overflow. La GNU C Library (GLIBC) è una componente essenziale di ogni sistema basato su Linux. Infatti, essa rappresenta la principale interfaccia tra i programmi e il kernel del sistema operativo. In particolare, questa vulnerabilità, denominata CVE-2023-6246, è stata individuata all’interno delle funzioni:
- vsylog_internal();
- syslog();
- vsyslog();
La falla di sicurezza è stata involontariamente introdotta nella versione 2.37 della GNU C Library ad agosto 2022, per poi finire inevitabilmente anche nella 2.36, mediante backporting. Con questa vulnerabilità è possibile eseguire attacchi heap overflow, che permettono ad un utente non autorizzato di ottenere pieno controllo dei permessi di root.
Tra le distribuzioni Linux risultate vulnerabili ci sono:
- Debian (versioni 12 e 13);
- Ubuntu (versioni 23.04 e 23.10);
- Fedora (versioni 37, 38 e 39);
Sfruttare questa vulnerabilità è piuttosto complicato, in quanto si deve spesso utilizzare un argv[0] insolitamente lungo. A causa dell’ampio utilizzo di GLIBC, il suo impatto resta comunque molto significativo.
Come difendersi dall’heap overflow
Abbiamo visto come l’heap overflow possa rappresentare una terribile minaccia per la sicurezza di dati e sistemi. Per prevenire questo tipo di attacco, si può far ricorso a una serie di consigli e best practices di seguito proposte.
- Adottare pratiche di secure coding. Validando e sanificando in maniera appropriata gli input dei programmi, si può prevenire l’inserimento di codice malevolo in un determinato programma da parte dei cybercriminali.
- Aggiornare costantemente i propri sistemi e i propri software. Gli aggiornamenti di hardware e software permettono di ottenere sempre le ultime patch di sicurezza. Questo aiuta a difendersi contro vulnerabilità già note che si possono sfruttare per eseguire attacchi heap overflow.
Adottando queste misure di sicurezza, si riduce al minimo il rischio di subire un attacco heap overflow.



