Sfruttamento dell'heap: use-after-free e heap spraying
Comprendete i meccanismi interni di glibc malloc, le condizioni use-after-free e le tecniche di heap spraying.
Sfruttamento dell'heap: use-after-free e heap spraying è una lezione Cyber Security Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cyber Security Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cyber Security Academy include 4 lezioni in totale.
L'heap
L'heap è la memoria dinamica allocata in fase di esecuzione tramite malloc()/free()/new/delete. A differenza dello stack, il layout dell'heap è determinato dai pattern di allocazione e deallocazione, non dallo stack delle chiamate. Le vulnerabilità dell'heap sono comuni nei browser, nei parser e nei demoni di rete.
Use-After-Free (UAF)
Una vulnerabilità di Use-After-Free si verifica quando un programma continua a usare una regione di memoria dopo averla liberata. Se la regione liberata viene riallocata con dati controllati dall'attaccante, il programma opera quindi sui dati dell'attaccante usando il puntatore obsoleto.
Esempio di UAF
Pattern UAF:
// Vulnerable C code:
struct Object *obj = malloc(sizeof(*obj));
free(obj);
// Later, attacker causes a new malloc to fill the freed region
// with their data...
obj->method(); // now calls attacker's function pointer!Heap Feng Shui
Heap feng shui (o heap grooming) è la tecnica di manipolare l'allocatore dell'heap per collocare gli oggetti in posizioni specifiche, consentendo il riutilizzo controllato della memoria liberata. L'attaccante modella l'heap attivando allocazioni e deallocazioni secondo una sequenza precisa.
Heap Spraying
Heap spraying alloca grandi quantità di dati controllati dall'attaccante (shellcode + NOP sled) in tutto l'heap. Quando gran parte dell'heap è occupata, è probabile che un puntatore errato finisca nei dati dell'attaccante. Viene spesso usato con bug UAF o di confusione di tipo.
// JavaScript heap spray:
var spray = [];
for(var i = 0; i < 100000; i++) {
spray[i] = unescape("%90%90...shellcode...");
}Double Free
Un double free si verifica quando la memoria viene liberata due volte. La seconda liberazione corrompe i metadati dell'allocatore dell'heap (i puntatori alle liste libere), consentendo potenzialmente all'attaccante di controllare dove viene collocata la prossima allocazione e di scrivere a un indirizzo arbitrario.
Overflow di un buffer nell'heap
Come gli overflow dello stack, un overflow di un buffer nell'heap scrive oltre la fine di un'allocazione nell'heap. A differenza degli overflow dello stack, il bersaglio è in genere costituito dai metadati dell'heap (dimensione, puntatori forward/backward) o da allocazioni adiacenti contenenti puntatori a funzioni o a vtable.
Confusione di tipo
La confusione di tipo si verifica quando un'area di memoria allocata come un tipo viene usata come un tipo diverso. È comune nei motori JavaScript e nel codice C++. Se l'attaccante riesce a controllare l'ordine delle allocazioni, può fare in modo che il motore tratti i dati dell'attaccante come un oggetto attendibile.
Internals di ptmalloc e tcmalloc
Comprendere l'allocatore dell'heap aiuta nello sviluppo degli exploit. Il ptmalloc di glibc usa bin (unsorted, small, large) e fast bin. tcache (cache per thread) è la prima fonte da cui vengono effettuate le allocazioni. Gli exploit mirano spesso alla corruzione dei bin per controllare gli indirizzi delle allocazioni future.
Mitigazioni
Mitigazioni per lo sfruttamento dell'heap:
- Heap randomization (parte di ASLR) — randomizza la base dell'heap
- Safe unlinking — verifica i puntatori forward/backward prima di rimuoverli dalla lista
- tcache poisoning detection — introdotta in glibc 2.32
- Pointer mangling — cifra i puntatori memorizzati in tcache
- Linguaggi memory-safe — Rust elimina gli UAF in fase di compilazione
Exploit dell'heap nei browser
La maggior parte degli 0-day dei browser coinvolge vulnerabilità dell'heap nei motori JavaScript (V8, SpiderMonkey). I browser moderni concatenano più livelli nelle catene di evasione dal sandbox: bug nell'heap del renderer → evasione al processo del browser → escalation dei privilegi del sistema operativo. Ogni passaggio richiede una tecnica specifica.
Verifica rapida: sfruttamento dell'heap
Quale vulnerabilità consente a un attaccante di controllare l'esecuzione del programma usando un puntatore obsoleto verso una memoria già liberata e riallocata con dati dell'attaccante?
Riepilogo della lezione
Le vulnerabilità dell'heap — UAF, double free, overflow dell'heap e confusione di tipo — sfruttano una gestione errata della memoria dinamica. Use-after-free è la classe di exploit moderna più diffusa. L'heap spraying massimizza la probabilità di finire sui dati dell'attaccante. Mitigazioni: ASLR, safe unlinking e pointer mangling. I linguaggi memory-safe come Rust eliminano completamente queste classi di vulnerabilità.
Domande Frequenti
La lezione «Sfruttamento dell'heap: use-after-free e heap spraying» è gratuita?
Sì — il testo completo di «Sfruttamento dell'heap: use-after-free e heap spraying» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cyber Security Academy, passa a CoddyKit PRO. Il corso Cyber Security Academy include 4 lezioni in totale.
Cosa imparerò in «Sfruttamento dell'heap: use-after-free e heap spraying»?
Comprendete i meccanismi interni di glibc malloc, le condizioni use-after-free e le tecniche di heap spraying. Eserciti Cyber Security Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cyber Security Academy?
Non è richiesta alcuna esperienza precedente. Cyber Security Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Sfruttamento dell'heap: use-after-free e heap spraying»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cyber Security Academy?
Sì. Ogni lezione Cyber Security Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Buffer overflow nello stack
- Return-Oriented Programming (ROP)
- Vulnerabilità di format string
- Sfruttamento dell'heap: use-after-free e heap spraying