Fastbin Dup — Double-free sur fastbins

Heap glibc

Principe

L'attaque fastbin dup exploite un double-free sur un chunk de taille fastbin pour insérer deux fois le même chunk dans la liste, permettant ensuite d'allouer un chunk à une adresse arbitraire (ex: au-dessus d'une cible).

Déroulé

a = malloc(0x40); b = malloc(0x40)
free(a); free(b); free(a)   # double free (b entre les deux
                            # contourne le check 'double free')
# La fastbin contient : a -> b -> a
x = malloc(0x40)   # renvoie a
# écrire un faux fd dans a pour pointer vers la cible
*x = target_addr - 0x10
malloc(0x40); malloc(0x40)
chunk = malloc(0x40)  # renvoie target_addr

Contraintes & parade

Le faux chunk doit passer le check de taille (champ size cohérent avec la fastbin). glibc moderne ajoute tcache (à remplir d'abord) et le pointeur key anti-double-free, ainsi que le safe-linking (chiffrement des fd).