Le 14 janvier 2010, Tavis Ormandy a annoncé sur la liste de diffusion Full-Disclosure la découverte d'une vulnérabilité [1] touchant les versions du noyaux Linux >= 2.6.28, et publié un proof of concept [2] provoquant le freeze du système. Cette vulnérabilité est de type use after free : une zone de mémoire est libérée, mais reste référencée par un pointeur. xorl a publié sur son blog le jour même une analyse succincte de cette vulnérabilité [3]. Nous verrons dans la suite de cet article comment l'exploiter afin d'élever ses privilèges.
1. Analyse de la vulnérabilité
1.1 Description des notifications asynchrones
Le noyau Linux possède un mécanisme pour signaler à un processus que des données sont disponibles en entrée ou en sortie sur un descripteur de fichier donné, en lui envoyant le signal SIGIO. La notification est activée en utilisant l'appel système ioctl(fd, FIOASYNC, &flag), qui passe le descripteur de fichier fd en mode asynchrone.
Chaque driver supportant ce mécanisme de notification asynchrone possède une liste simplement chaînée de structures fasync_struct. Cette structure contient entre autres le numéro du descripteur de fichier fd à notifier et la structure fa_file associée au descripteur de fichier pour représenter ses différentes caractéristiques :
struct fasync_struct {
int magic;
intfa_fd;
struct fasync_struct *fa_next;
structfile *fa_file;
};
struct file {
...
struct path f_path;
const struct...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première