Tcache Dumping

Article pour récupérer un leak via une manipulation du tcache

Introduction

Cette technique m'a été présenté par mon ami Dilag_Luc. Elle est réalisable dans un certain context. Si vous pouvez la possibilité de controler le heap (free & malloc).

Control du Heap

Cette technique est plus CTF like mais elle est quand même très utile. Dans le cadre où vous pouvez faire des allocations d'au moins 0x60 ainsi que de pouvoir free ces allocations. Vous pourrez faire du Tcache Dumping.

Get my leak ?

Le tcache qui a été ajouté depuis les glibc >= 2.26 est une liste qui contient des chunks. Celle-ci est différente de liste précendente qui était doublement chainée qui utilisait malloc_chunk. Tcache a sa propre structure :

typedef struct tcache_entry
{
  struct tcache_entry *next;
} tcache_entry;

typedef struct tcache_perthread_struct
{
  char counts[TCACHE_MAX_BINS];
  tcache_entry *entries[TCACHE_MAX_BINS];
} tcache_perthread_struct;

Je ne parlerais pas du safe-linking (glibc >= 2.32) dans cette article. Le chunk free qui est dans le tcache à donc un pointer vers les chunks présents dans la liste. Si il est possible d'avoir des primitives d'écriture ou un Read After Free, il sera donc possible d'obtenir un leak du heap.

Jusqu'à la rien d'extraordinaire,

Last updated