Tcache Bin Attack
Reading time: 6 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
Basic Information
Pour plus d'informations sur ce qu'est un Tcache bin, consultez cette page :
Tout d'abord, notez que le Tcache a été introduit dans la version 2.26 de Glibc.
L'attaque Tcache (également connue sous le nom de poisoning Tcache) proposée sur la page guyinatuxido est très similaire à l'attaque fast bin où l'objectif est d'écraser le pointeur vers le prochain chunk dans le bin à l'intérieur d'un chunk libéré vers une adresse arbitraire afin qu'il soit ensuite possible de allouer cette adresse spécifique et potentiellement écraser les pointeurs.
Cependant, de nos jours, si vous exécutez le code mentionné, vous obtiendrez l'erreur : malloc(): unaligned tcache chunk detected
. Il est donc nécessaire d'écrire comme adresse dans le nouveau pointeur une adresse alignée (ou d'exécuter suffisamment de fois le binaire pour que l'adresse écrite soit en fait alignée).
Attaque des index Tcache
Il est généralement possible de trouver au début du tas un chunk contenant le nombre de chunks par index à l'intérieur du tcache et l'adresse du head chunk de chaque index tcache. Si pour une raison quelconque il est possible de modifier cette information, il serait possible de faire pointer le head chunk de certains index vers une adresse souhaitée (comme __malloc_hook
) pour ensuite allouer un chunk de la taille de l'index et écraser le contenu de __malloc_hook
dans ce cas.
Exemples
- CTF https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html
- Fuite d'informations Libc : Il est possible de remplir les tcaches, d'ajouter un chunk dans la liste non triée, de vider le tcache et de ré-allouer le chunk depuis le bin non trié en écrasant seulement les 8 premiers octets, laissant la deuxième adresse vers libc du chunk intacte afin que nous puissions la lire.
- Attaque Tcache : Le binaire est vulnérable à un débordement de tas de 1 octet. Cela sera abusé pour changer le header de taille d'un chunk alloué en le rendant plus grand. Ensuite, ce chunk sera libéré, l'ajoutant au tcache de chunks de fausse taille. Ensuite, nous allouerons un chunk avec la taille falsifiée, et le chunk précédent sera retourné sachant que ce chunk était en fait plus petit et cela nous donne l'opportunité de écraser le prochain chunk en mémoire.
Nous allons en abuser pour écraser le pointeur FD du prochain chunk pour pointer versmalloc_hook
, afin qu'il soit possible d'allouer 2 pointeurs : d'abord le pointeur légitime que nous venons de modifier, puis la deuxième allocation retournera un chunk dansmalloc_hook
qui peut être abusé pour écrire un one gadget. - CTF https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html
- Fuite d'informations Libc : Il y a une utilisation après libération et une double libération. Dans ce rapport, l'auteur a divulgué une adresse de libc en lisant l'adresse d'un chunk placé dans un petit bin (comme le fuyant depuis le bin non trié mais depuis le petit).
- Attaque Tcache : Une attaque Tcache est effectuée via une double libération. Le même chunk est libéré deux fois, donc à l'intérieur du Tcache, le chunk pointera vers lui-même. Ensuite, il est alloué, son pointeur FD est modifié pour pointer vers le free hook et ensuite il est alloué à nouveau, donc le prochain chunk dans la liste sera dans le free hook. Ensuite, cela est également alloué et il est possible d'écrire l'adresse de
system
ici, donc lorsque malloc contenant"/bin/sh"
est libéré, nous obtenons un shell. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html
- La principale vulnérabilité ici est la capacité de
free
n'importe quelle adresse dans le tas en indiquant son offset. - Attaque des index Tcache : Il est possible d'allouer et de libérer un chunk d'une taille qui, lorsqu'elle est stockée à l'intérieur du chunk tcache (le chunk avec les informations des bins tcache), générera une adresse avec la valeur 0x100. Cela est dû au fait que le tcache stocke le nombre de chunks dans chaque bin dans des octets différents, donc un chunk dans un index spécifique génère la valeur 0x100.
- Ensuite, cette valeur ressemble à un chunk de taille 0x100. Permettant de l'abuser en
free
cette adresse. Cela ajoutera cette adresse à l'index des chunks de taille 0x100 dans le tcache. - Ensuite, allouer un chunk de taille 0x100, l'adresse précédente sera retournée comme un chunk, permettant d'écraser d'autres index tcache.
Par exemple, en mettant l'adresse de malloc hook dans l'un d'eux et en allouant un chunk de la taille de cet index, cela accordera un chunk dans le calloc hook, ce qui permet d'écrire un one gadget pour obtenir un shell. - CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html
- Même vulnérabilité que précédemment avec une restriction supplémentaire.
- Attaque des index Tcache : Attaque similaire à la précédente mais utilisant moins d'étapes en libérant le chunk qui contient les informations tcache afin que son adresse soit ajoutée à l'index tcache de sa taille, il est donc possible d'allouer cette taille et d'obtenir les informations du chunk tcache en tant que chunk, ce qui permet d'ajouter le free hook comme adresse d'un index, de l'allouer et d'écrire un one gadget dessus.
- Math Door. HTB Cyber Apocalypse CTF 2023
- Write After Free pour ajouter un nombre au pointeur
fd
. - Beaucoup de heap feng-shui est nécessaire dans ce défi. Le rapport montre comment contrôler la tête de la liste libre Tcache est très pratique.
- Fuite Glibc via
stdout
(FSOP). - Poisoning Tcache pour obtenir un primitive d'écriture arbitraire.
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.